gpt4 book ai didi

c# - 扩展方法中的 ILoggerFactory - 生命周期和处置

转载 作者:行者123 更新时间:2023-11-30 13:06:46 24 4
gpt4 key购买 nike

创建 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被处置

System.ObjectDisposedException: Cannot access a disposed object. Object name: 'LoggerFactory'. at Microsoft.Extensions.Logging.LoggerFactory.CreateLogger(String categoryName) at Microsoft.Extensions.Logging.Logger`1..ctor(ILoggerFactory factory) at Microsoft.Extensions.Logging.LoggerFactoryExtensions.CreateLogger[T](ILoggerFactory factory)

那么存储一个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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com