【发布时间】:2018-10-24 20:31:15
【问题描述】:
我看到各种库从 DI 解析 ILogger<T>。例如,请参阅 Identity 的 SignInManager 类。
ILogger<T> 在哪里注册到 DI 容器以使这成为可能?
我所能找到的只是一个在 Hosting 的 WebHostBuilder 类中注册的 ILoggerFactory 实例。允许从应用程序代码解析ILoggerFactory,但不允许解析ILogger<T> 是有意义的。
从日志记录examples,为了创建ILogger,您必须显式调用factory.CreateLogger()。
【问题讨论】:
-
我认为这可能是您正在寻找的代码 github.com/aspnet/Logging/blob/dev/src/… 就像,我可以澄清一下我们是否应该使用 ILoggerFactory 来创建记录器实例,或者我们应该声明我们需要一个 ILogger
在我们的构造函数中。 -
似乎 Logger
本身在其自己的构造函数中采用 ILoggerFactory,因此它可以创建该类型的实际记录器。 github.com/aspnet/Logging/blob/dev/src/… 我想我会在我目前依赖 ILoggerFactory 并明确创建自己的记录器的地方在 myc 代码中尝试它。 -
哇,我怎么没看到?那是我一直在寻找的缺失部分。
-
我发现它工作得很好,而且声明对 ILogger
的依赖似乎更简单。我有一种情况,我直接创建了一些子对象,而不是使用 DI,在这种情况下,我仍然需要 ILoggerFactory,所以我可以将它传递给子对象,让他们创建自己的记录器。 -
有道理。如果你想发布你的答案,我会接受。
标签: asp.net-core