上下文:简单的开箱即用blazor 3.1 SERVER SIDE示例-添加日志记录(只是试图在组件中将内容添加到VS2019中的调试控制台(。
我保持ConfigureServices的原样,并发现了在程序.cs(!(中设置日志记录的SO示例这项工作:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(
logging =>
{
logging.ClearProviders();
logging.AddConsole();
})
等等。
在我的组件中,可以很好地解决所有问题
[Inject] public ILogger<Foo> Logger { get; set; }
但是,为什么不在ConfigureServices中设置应该DI'ed的其余内容呢???
- 是否存在"隐藏"DI?(有点像在.Net framework-webapi中进行(
- 是否可以将其移动到ConfigureServices,且excact结果相同(或(
在ASP.NET core2.x中,您可以在Program.cs中部分配置依赖项注入容器,并将配置的类注入Startup.cs。因此,ConfigureLogging()
方法在IWebHostBuilder
实例上调用ConfigureServices()
,并配置一些设置。由于这些服务是在Startup
实例化之前在DI容器中配置的,因此可以将它们注入Startup
构造函数:
public Startup(
IConfiguration configuration,
ILogger<Startup> logger) // Inject pre-configured service
{
}
更多
但是ASP.NET Core 3.0不再支持这种方法问题是它需要两次构建依赖项注入容器。
- 是否存在"隐藏"DI?(有点像发生的事情在.Net framework-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。您的业务类应该在Startup中添加到DI。