要在扩展方法中创建 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
是不正确的吗?从扩展方法访问它的替代方法是什么?存储 IServiceProvider
和 GetRequiredService<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/