Затем в Program.cs это просто простой код из примера проекта
Код: Выделить всё
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
Но чего я не понимаю, так это того, что я не указываю сгенерированный контроллер имя класса в вызове метода builder.Services.AddControllers() или app.MapControllers().
Как среда выполнения узнает, какой контроллер ей следует использовать, в чем/где заключается магия?
Это что-то сделано путем отражения в базовой структуре? Я имею в виду зациклить все классы и найти те, которые реализуют интерфейс контроллера?
Если это так, то какую-либо причину, по которой он спроектирован таким образом, немного сложно понять.
Для grpc или размещенной службы нам как минимум нужно указать класс (services.AddGrpcClient/services.AddHostedService) для его обработки, но почему бы не использовать открытый контроллер API?
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-is-added
Мобильная версия