C# 我可以不使用LoggerFactory直接注射ILogger吗
从IoC的角度来看,我们应该能够轻松地设置和选择接口的实现 如果我创建了C# 我可以不使用LoggerFactory直接注射ILogger吗,c#,asp.net-core,.net-core,ilogger,iloggerfactory,C#,Asp.net Core,.net Core,Ilogger,Iloggerfactory,从IoC的角度来看,我们应该能够轻松地设置和选择接口的实现 如果我创建了ILogger的自定义实现,我是否可以直接将其注入控制器而不使用ILogger工厂ILogger提供程序ILogger结构 通过这种方式,我可以减少设置开销,并对记录器进行更多控制。例如,我可以强制转换并访问CustomProperty。相反,由ILogger工厂ILogger供应商ILogger链创建的记录器将维护ILoggers的集合,我无法再访问我的CustomLogger 代码如下所示。这是一个可行的解决方案吗 定义
ILogger
的自定义实现,我是否可以直接将其注入控制器而不使用ILogger工厂ILogger提供程序ILogger
结构
通过这种方式,我可以减少设置开销,并对记录器进行更多控制。例如,我可以强制转换并访问CustomProperty
。相反,由ILogger工厂ILogger供应商ILogger
链创建的记录器将维护ILogger
s的集合,我无法再访问我的CustomLogger
代码如下所示。这是一个可行的解决方案吗
定义自定义记录器
public class CustomLogger : ILogger
{
public CustomPropertyType CustomProperty;
public CustomLogger(){...}
public IDisposable BeginScope<TState>(TState state){...}
public bool IsEnabled(LogLevel logLevel){...}
public void Log<TState>(
LogLevel logLevel,
EventId eventId,
TState state,
Exception exception,
Func<TState, Exception, string> formatter)
{
// Use some info from CustomProperty in while sending the log
}
}
是的,你需要一个提供者。您可以将其添加到.NET核心应用程序的
启动
类中。此类代码应如下所示:
loggerFactory.AddProvider(new CustomLoggerProvider(new CustomLoggerConfiguration()));
这是对这种用法的一种解释。这就是一个例子。是否真的需要LoggerProvider?从IoC的角度来看,我们也可以只做
服务。addScope()
对吗?或者它不是推荐的用法?也可以使用,但从Microsoft文档中可以清楚地看到,提供者是默认的方式。
public ExampleController(ILogger logger)
{
this.logger = logger;
this.customProperty = (CustomLogger)logger.CustomProperty;
}
loggerFactory.AddProvider(new CustomLoggerProvider(new CustomLoggerConfiguration()));