为了在扩展方法中创建一个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:无法访问已释放的对象。 对象名称:“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
不正确吗?从扩展方法访问它的替代方法是什么?存储IServiceProvider
和GetRequiredService<ILoggerFactory>
?
ILoggerFactory
默认情况下注册为 Singleton。内置的 DI 不应该 "意外" 处理它。什么时候会出现ObjectDisposedException
? - Ilya Chumakov