【发布时间】: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 依赖项是如何工作的。
-
我了解单例依赖关系我要问的是当 ILogger
被解析时,DI 如何知道使用 ILoggerFactory。
标签: c# .net-core iloggerfactory