gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:30:02 25 4
gpt4 key购买 nike

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

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

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

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?我可能有一个包含 MySerilogEnricher 的类,并在属性中将依赖项传递给它,但这看起来很乱。

最佳答案

您可以使用没有泛型的 .With() 方法来传递您的增强器实例。因此,在您的示例中,它将是:

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

关于c# - 如何将依赖项传递给 Serilog Enricher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39838497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com