C# 为什么日志设置在CreateHostBuilder中而不是在ConfigureServices中?
上下文:简单的开箱即用Blazor3.1服务器端示例-添加日志记录(只是尝试在组件中获取VS2019中调试控制台的内容) 我将ConfigureServices保持原样,并在program.cs(!)中找到了设置日志记录的示例 这项工作:C# 为什么日志设置在CreateHostBuilder中而不是在ConfigureServices中?,c#,asp.net-core,blazor,blazor-server-side,C#,Asp.net Core,Blazor,Blazor Server Side,上下文:简单的开箱即用Blazor3.1服务器端示例-添加日志记录(只是尝试在组件中获取VS2019中调试控制台的内容) 我将ConfigureServices保持原样,并在program.cs(!)中找到了设置日志记录的示例 这项工作: public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .Configu
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(
logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
ect
在我的组件中,使用
[Inject] public ILogger<Foo> Logger { get; set; }
[Inject]公共ILogger记录器{get;set;}
但是为什么不在ConfigureServices中,在那里设置其余的东西呢
在ASP.NET core 2.x中,您可以在Program.cs中部分配置依赖项注入容器,并将配置的类注入Startup.cs。因此,
ConfigureLogging()
方法调用IWebHostBuilder
实例上的ConfigureServices()
,并配置一些设置。由于这些服务是在实例化Startup
之前在DI容器中配置的,因此可以将它们注入Startup
构造函数:
public Startup(
IConfiguration configuration,
ILogger<Startup> logger) // Inject pre-configured service
{
}
ConfigureServices
,结果相同
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddConsole();
});
}
因此,在何处添加日志记录配置取决于您。日志记录是基础设施,可以作为主机配置添加到Program.cs。您的业务类应该在启动时添加到DI中
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(builder =>
{
builder.ClearProviders();
builder.AddConsole();
});
}