ILogger< T>通过DI解决? [英] How is ILogger<T> resolved via DI?

查看:57
本文介绍了ILogger< T>通过DI解决?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看到各种库都可以从DI中解析 ILogger< T> .例如,请参见Identity的 SignInManager 类.

I see various libraries resolving ILogger<T> from DI. For example, see Identity's SignInManager class.

在哪里向I容器注册了 ILogger< T> 以便使之成为可能?

Where is ILogger<T> registered with the DI container to make this possible?

我所能找到的只是一个在主机的ILoggerFactory 实例.AspNet.Hosting/WebHostBuilder.cs#L73"rel =" noreferrer> WebHostBuilder 类.允许从应用程序代码解析 ILoggerFactory ,但不能解析 ILogger< T> 是有道理的.

All I have been able to find is a ILoggerFactory instance being registered in Hosting's WebHostBuilder class. This makes sense to allow resolving ILoggerFactory, but not ILogger<T> from application code.

从日志记录示例中,为了创建 ILogger ,您必须显式调用 factory.CreateLogger().

From the Logging examples, in order to create an ILogger, you have have to explicitly call factory.CreateLogger().

推荐答案

ILogger<>在此处注册为Logger<>: https://github.com/aspnet/Logging/blob/master/src/Microsoft.Extensions.Logging/LoggingServiceCollectionExtensions.cs

ILogger<> is registered here as Logger<>: https://github.com/aspnet/Logging/blob/master/src/Microsoft.Extensions.Logging/LoggingServiceCollectionExtensions.cs

Logger<>将ILoggerFactory带入其自己的构造函数中,因此它可以创建任何类型的实际记录器: https://github.com/aspnet/日志记录/blob/master/src/Microsoft.Extensions.Logging.Abstractions/LoggerOfT.cs

Logger<> takes ILoggerFactory into its own constructor so it can create the actual logger of whatever type: https://github.com/aspnet/Logging/blob/master/src/Microsoft.Extensions.Logging.Abstractions/LoggerOfT.cs

因此,对ILogger进行构造函数依赖似乎要比对ILoggerFactory进行构造以手动创建记录器更为简单.但是在某些情况下,如果您需要创建多种类型的记录器或新建也需要创建记录器的其他对象,则可能需要ILoggerFactory.

So it seems like it is more simple to take a constructor dependency on a ILogger than to take one on ILoggerFactory in order to create a logger manually. But there are scenarios where you may need an ILoggerFactory if you need to create multiple types of loggers or new up other objects that also need to create loggers.

这篇关于ILogger&lt; T&gt;通过DI解决?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆