Dotnet 核心中的 LoggerFactory 如何被调用
Posted
技术标签:
【中文标题】Dotnet 核心中的 LoggerFactory 如何被调用【英文标题】:How LoggerFactory in Dotnet core gets called 【发布时间】: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<ILogger<TestClass>>();
一旦我解决了记录器,它就会调用 LoggerFactory 的 CreateLogger 方法,其中 CategoryName 作为 className 并带有 Namespace 前缀...我的问题是它是如何在兜帽。看来GetService
正在调用 LoggerFactory 的方法。关于 DI 基础架构如何实例化和使用 LoggerFactory 有什么想法吗?
【问题讨论】:
它在第一次调用以获取服务并使用相同的实例之后被注册。您应该搜索 Singleton 依赖项是如何工作的。 我了解单例依赖关系我要问的是当 ILoggerLogger<T>
有一个依赖于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
【讨论】:
以上是关于Dotnet 核心中的 LoggerFactory 如何被调用的主要内容,如果未能解决你的问题,请参考以下文章