如何将依赖项传递给 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();
我在我的应用程序中使用 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();