Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以不使用LoggerFactory直接注射ILogger吗_C#_Asp.net Core_.net Core_Ilogger_Iloggerfactory - Fatal编程技术网

C# 我可以不使用LoggerFactory直接注射ILogger吗

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 代码如下所示。这是一个可行的解决方案吗 定义

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

如果我创建了
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()));