C# 容器如何实际解析ILogger<;T>;

C# 容器如何实际解析ILogger<;T>;,c#,asp.net-core,C#,Asp.net Core,在ASP.NET Core 2中,当我们谈论日志记录时,只需通过ILoggerFactory.AddProvider()注册提供程序或使用适当的扩展方法就足够了。然后您将能够解析ILogger(无需注册已关闭的ILogger)。我正在努力在ILogger工厂.CreateLogger调用和实际的ILogger解析之间架起一座桥梁:似乎有什么地方发生了魔法,但我没有找到。 有什么想法吗 一切都始于: 如上所述 最后,for记录器如下所示: services.TryAdd(ServiceDescri

在ASP.NET Core 2中,当我们谈论日志记录时,只需通过
ILoggerFactory.AddProvider()
注册提供程序或使用适当的扩展方法就足够了。然后您将能够解析
ILogger
(无需注册已关闭的
ILogger
)。我正在努力在
ILogger工厂.CreateLogger
调用和实际的
ILogger
解析之间架起一座桥梁:似乎有什么地方发生了魔法,但我没有找到。 有什么想法吗

一切都始于:

如上所述

最后,for
记录器
如下所示:

services.TryAdd(ServiceDescriptor.Singleton<ILoggerFactory, LoggerFactory>());
services.TryAdd(ServiceDescriptor.Singleton(typeof(ILogger<>), typeof(Logger<>)));
public Logger(ILoggerFactory factory)
{
    // ...

    _logger = factory.CreateLogger(TypeNameHelper.GetTypeDisplayName(typeof(T)));
}

Logger
类的其余部分只是非泛型
\u Logger
的一个传递,它现在包括
T
类型的名称。

这似乎是一个。您试图实现的最终目标是什么?“我试图了解ILogger在没有直接接口注册的情况下是如何解析的。就这样。还没问题:)你是想在图书馆里找到容器中个人ILogger注册的地方吗?@EugeneKomisarenko:是的
public Logger(ILoggerFactory factory)
{
    // ...

    _logger = factory.CreateLogger(TypeNameHelper.GetTypeDisplayName(typeof(T)));
}