【问题标题】:How LoggerFactory in Dotnet core gets calledDotnet 核心中的 LoggerFactory 如何被调用
【发布时间】:2022-01-12 20:47:52
【问题描述】:

我在 Dotnet core 3.1 中创建了一个示例 ConsoleApp,并在其中添加了 Microsoft.Logging.Extension.Abstractions(5.0.0) 包。 我还使用了 Microsoft.Extensions.DependencyInjection(6.0.0) 并将 ServiceCollection 设置为:

var container = new ServiceCollection();
container.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
container.AddSingleton<ILoggerFactory>(new MyFactory()); // test implementation
// Created ServiceProvider
var sp = container.BuildServiceProvider();

然后我将记录器解析为sp.GetService&lt;ILogger&lt;TestClass&gt;&gt;(); 一旦我解决了记录器,它就会调用 LoggerFactory 的 CreateLogger 方法,其中 CategoryName 作为 className 并带有 Namespace 前缀...我的问题是它是如何在兜帽。看来GetService 正在调用 LoggerFactory 的方法。关于 DI 基础架构如何实例化和使用 LoggerFactory 有什么想法吗?

【问题讨论】:

  • 它在第一次调用以获取服务并使用相同的实例之后被注册。您应该搜索 Singleton 依赖项是如何工作的。
  • 我了解单例依赖关系我要问的是当 ILogger 被解析时,DI 如何知道使用 ILoggerFactory。

标签: c# .net-core iloggerfactory


【解决方案1】:

Logger&lt;T&gt; 有一个依赖于ILoggerFactory 的公共构造函数。 LoggerFactory 就是这样解决的。

public class Logger<T> : ILogger<T>
{
      public Logger(ILoggerFactory factory)
      {
           //.......
           //.......
        }
}

这里是源代码的链接。

https://github.com/aspnet/Logging/blob/master/src/Microsoft.Extensions.Logging.Abstractions/LoggerOfT.cs

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 2016-11-22
    • 2019-03-12
    • 2017-03-06
    • 2020-02-18
    • 1970-01-01
    • 2019-08-23
    • 2018-12-08
    • 2019-05-29
    相关资源
    最近更新 更多