Метод Configure работает как magi c в ASP. NET Core 3.1.
Сценарий 1
При создании нового проекта , фреймворк формирует следующую сигнатуру метода:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
Нет ничего удивительного в том, что приложение работает с этой сигнатурой, потому что я могу предположить, что ASP. NET Core framework ожидает, что сигнатура будет такой, как есть .
Сценарий 2
Удаляется второй параметр IWebHostEnvironment:
public void Configure(IApplicationBuilder app)
Приложение работает.
Сценарий 3
Внедрил мой DbContext, добавленный в IServiceCollection в методе ConfigureServices вместе с регистратором:
public void Configure(IApplicationBuilder app, ILogger<Startup> logger, VegaDbContext vegaDbContext)
Удивительно, но приложение работает. Похоже, фреймворк достаточно способен разрешать типы, добавленные в коллекцию сервисов. Хороший знак.
Inline - это реализация метода ConfigureServices:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<VegaDbContext>(options =>
options.UseSqlServer(
configuration.GetConnectionString("VegaDb")));
services.AddControllers();
}
Scenario 4
Введен WeatherForecastController, который, как я полагаю, добавляется в IServiceCollection через services.AddControllers ():
public void Configure(IApplicationBuilder app, WeatherForecastController weatherForecastController)
Приложение не работает. Возникает следующее исключение:
System.Exception: 'Не удалось разрешить службу типа' Vega.Controllers.WeatherForecastController 'для параметра' weatherForecastController 'метода' Configure 'типа' Vega. Startup '.'
Может ли кто-нибудь объяснить, как вызов метода на самом деле выполняется фреймворком и как он способен разрешать некоторые типы, такие как ILogger и VegaDbContext , но не WeatherForecastController .