【发布时间】:2020-11-04 19:35:25
【问题描述】:
从 IoC 的角度来看,我们应该能够轻松设置和选择接口的实现。
如果我创建了ILogger 的自定义实现,我可以直接将它注入到没有ILoggerFactory-ILoggerProvider-ILogger 结构的控制器中吗?
通过这种方式,我可以减少设置开销并更好地控制 Logger。例如,我可以投射和访问CustomProperty。相比之下,ILoggerFactory-ILoggerProvider-ILogger 链创建的记录器将维护ILoggers 的集合,我无法再访问我的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
}
}
设置依赖注入
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ILogger, CustomLogger>();
//Other logic
}
使用CustomLogger 实现访问ILogger
public ExampleController(ILogger logger)
{
this.logger = logger;
this.customProperty = (CustomLogger)logger.CustomProperty;
}
【问题讨论】:
标签: c# asp.net-core .net-core ilogger iloggerfactory