簡體   English   中英

我可以在沒有 LoggerFactory 的情況下直接注入 ILogger

[英]Can I directly Inject ILogger without LoggerFactory

從 IoC 的角度來看,我們應該能夠輕松設置和選擇接口的實現。

如果我創建ILogger自定義實現,是否可以將它直接注入控制器而不使用ILoggerFactory-ILoggerProvider-ILogger結構?

通過這種方式,我可以減少設置開銷並更好地控制 Logger。 例如,我可以投射和訪問CustomProperty 相比之下,由ILoggerFactory-ILoggerProvider-ILogger鏈創建的記錄器將維護一個ILogger的集合,我無法再訪問我的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;
}

是的,您需要提供者。 您可以將其添加到 .NET Core 應用程序的Startup類中。 此類代碼應如下所示:

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

是對這種用法的解釋。 是一個例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM