我看到各种图书馆从DI解析ILogger<T>
。例如,请参阅Identity SignInManager
类。
为了使这成为可能,ILogger<T>
在DI容器中注册了哪个位置?
我能找到的是ILoggerFactory
个实体在Hosting的WebHostBuilder
课程中注册。这有助于从应用程序代码中解析ILoggerFactory
,而不是ILogger<T>
。
在记录examples中,为了创建ILogger
,您必须明确调用factory.CreateLogger()
。
答案 0 :(得分:5)
ILogger&LT;&GT;在这里注册为Logger&lt;&gt;: https://github.com/aspnet/Logging/blob/master/src/Microsoft.Extensions.Logging/LoggingServiceCollectionExtensions.cs
日志&LT;&GT;将ILoggerFactory转换为自己的构造函数,以便它可以创建任何类型的实际记录器: https://github.com/aspnet/Logging/blob/master/src/Microsoft.Extensions.Logging.Abstractions/LoggerOfT.cs
因此,似乎更容易对ILogger采用构造函数依赖,而不是在ILoggerFactory上采用ILoggerFactory以手动创建记录器。但是,如果您需要创建多种类型的记录器或新建其他需要创建记录器的对象,则有些情况下您可能需要ILoggerFactory。