如何将依赖项传递给 Serilog Enricher?

How do I pass a dependency to a Serilog Enricher?

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

var log = new LoggerConfiguration()
    .Enrich.With<MySerilogEnricher>()
    .ReadAppSettings()
    .CreateLogger();

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

error CS0310: 'SerilogEnricher' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TEnricher' in the generic type or method 'LoggerEnrichmentConfiguration.With()'

我明白为什么会收到此错误,但我没有找到解决此问题的简单方法。理想情况下,会有一个 WithInstance 调用,我可以这样使用:

var instance = new MySerilogEnricher(myDependency);
var log = new LoggerConfiguration()
    .Enrich.WithInstance<MySerilogEnricher>(instance)
    .ReadAppSettings()
    .CreateLogger();

有什么方法可以将依赖项传递给 MySerilogEnricher?我可能有一个 class 和 MySerilogEnricher 并在 属性 中将依赖项传递给它,但这看起来很乱。

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

var instance = new MySerilogEnricher(myDependency);
var log = new LoggerConfiguration()
    .Enrich.With(instance)
    .ReadAppSettings()
    .CreateLogger();