C# 为什么日志设置在CreateHostBuilder中而不是在ConfigureServices中?

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

上下文:简单的开箱即用Blazor3.1服务器端示例-添加日志记录(只是尝试在组件中获取VS2019中调试控制台的内容)

我将ConfigureServices保持原样,并在program.cs(!)中找到了设置日志记录的示例 这项工作:

    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中,在那里设置其余的东西呢

  • 是否有“引擎盖下”DI正在进行?(有点像以前一样 正在进行.Net框架工作(使用webapi)
  • 是否可以将其移动到具有相同结果的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(或根本不移动)
  • 是的,您可以将其移动到
    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();
        });
    }