我可以直接注入ILogger而无需LoggerFactory

时间:2020-11-04 19:35:25

标签: c# asp.net-core .net-core ilogger iloggerfactory

从IoC角度来看,我们应该能够轻松地设置和选择接口的实现。

如果我创建ILogger的自定义实现,是否可以将其直接注入到没有ILoggerFactory-ILoggerProvider-ILogger结构的控制器中?

通过这种方式,我可以减少设置开销,并可以对Logger进行更多控制。例如,我可以强制转换并访问CustomProperty。相反,由ILoggerFactory-ILoggerProvider-ILogger链创建的记录器将维护ILogger的集合,而我无法再访问CustomLogger

代码如下所示。这是可行的解决方案吗?

定义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
}

通过ILogger实现访问CustomLogger

public ExampleController(ILogger logger)
{
    this.logger = logger;
    this.customProperty = (CustomLogger)logger.CustomProperty;
}

1 个答案:

答案 0 :(得分:0)

是的,您需要提供者。您可以将其添加到.NET Core应用程序的Startup类中。这样的代码应如下所示:

loggerFactory.AddProvider(new CustomLoggerProvider(new CustomLoggerConfiguration()));

Here是这种用法的解释。 here是一个例子。

相关问题