В ASP. NET core 2.x вы можете частично настроить свой контейнер внедрения зависимостей в Program.cs и внедрить настроенные классы в Startup.cs. Таким образом, метод ConfigureLogging()
вызывает ConfigureServices()
в экземпляре IWebHostBuilder
и настраивает некоторые параметры. Поскольку эти службы настраиваются в контейнере DI до создания экземпляра Startup
, их можно внедрить в конструктор Startup
:
public Startup(
IConfiguration configuration,
ILogger<Startup> logger) // Inject pre-configured service
{
}
Подробнее
Но этот подход больше не поддерживается в ASP. NET Core 3.0! Проблема заключается в том, что он требует построения контейнера внедрения зависимостей дважды .
- Есть ли "под капотом" DI происходит? (немного похоже на то, что происходило. Net FrameWork W / Webapi)?
ConfigureLogging
просто позвоните ConfigureServices
без построения поставщика услуг
public static IWebHostBuilder ConfigureLogging(this IWebHostBuilder hostBuilder, Action<WebHostBuilderContext, ILoggingBuilder> configureLogging)
{
return hostBuilder.ConfigureServices((context, collection) => collection.AddLogging(builder => configureLogging(context, builder)));
}
Можно ли переместить его в ConfigureServices с точно таким же результатом (или вообще)?
да, вы можете переместить его в ConfigureServices
, и результат будет таким же
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddConsole();
});
}
Итак, куда добавить конфигурацию ведения журнала, зависит от вас. Ведение журнала является инфраструктурой и может быть добавлено в качестве конфигурации хоста в Program.cs. Ваши бизнес-классы должны быть добавлены в DI при запуске.