如何将依赖关系传递给Serilog Enricher?

use*_*861 7 c# dependency-injection serilog

我在我的应用程序中使用Serilog进行日志记录.当我配置记录器时,我有这样的代码:

var log = new LoggerConfiguration()
    .Enrich.With<MySerilogEnricher>()
    .ReadAppSettings()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

我想在我的MySerilogEnricher类中注入一些依赖项,但是当我尝试时,我得到了这个编译器错误:

错误CS0310:'SerilogEnricher'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法'LoggerEnrichmentConfiguration.With()'中将其用作参数'TEnricher'

我理解为什么我会收到这个错误,但我看不到一个简单的方法.理想情况下,WithInstance我可以使用这样的电话:

var instance = new MySerilogEnricher(myDependency);
var log = new LoggerConfiguration()
    .Enrich.WithInstance<MySerilogEnricher>(instance)
    .ReadAppSettings()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

有没有办法将依赖关系传递给MySerilogEnricher?我可能有一个带有MySerilogEnricher的类,并在属性中将依赖项传递给它,但这看起来很混乱.

小智 6

您可以使用.With()不带泛型的方法来传递丰富器的实例。所以在你的例子中,它将是:

var instance = new MySerilogEnricher(myDependency);
var log = new LoggerConfiguration()
    .Enrich.With(instance)
    .ReadAppSettings()
    .CreateLogger();
Run Code Online (Sandbox Code Playgroud)

  • 但是,如果我的依赖项不是单例,假设它是在容器中注册的具有范围或瞬态生命周期的服务,该怎么办? (8认同)