要在扩展方法中创建 ILogger,我将 ILoggerFactory 存储在静态类中

public static class ApplicationLogging
{
    public static ILoggerFactory LoggerFactory { get; set; }

    public static ILogger CreateLogger<T>() =>
        LoggerFactory?.CreateLogger<T>();

    public static ILogger CreateLogger(string name) =>
        LoggerFactory?.CreateLogger(name);

}

设置为
public void Configure(ILoggerFactory loggerFactory)
{
   ...
    ApplicationLogging.LoggerFactory = loggerFactory;
}

但是,我注意到 ILoggerFactory 被处理了



那么存储 ILoggerFactory 是不正确的吗?从扩展方法访问它的替代方法是什么?存储 IServiceProviderGetRequiredService<ILoggerFactory>

最佳答案

默认情况下,ILoggerFactory 不会添加到 DI 容器中。您应该使用提供的 AddLogging() 扩展方法注册它。

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddLogging()
}

在内部简单地做
services.TryAdd(ServiceDescriptor.Singleton<ILoggerFactory, LoggerFactory>());

无论如何,正如其他评论所说 - 尝试尽可能多地使用内置 DI 容器而不是自己的静态类来解决依赖关系。

关于c# - 扩展方法中的 ILoggerFactory - 生命周期和处置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45073073/

10-17 02:31