使用 autofac 在 SeriLog 丰富器中注入依赖项

dam*_*pee 4 autofac serilog

我想创建一个Serilog Enricher,从依赖项注入一些数据。autofac 如何将我的依赖项注入到增强器中?

这是我的容器设置:

builder.Register((c, p) =>
{
  return new LoggerConfiguration()
   .Enrich.FromLogContext()
   .Enrich.With<MyEnricherWhichCanAddMoreDataFromADependency>()
   // ...
  .CreateLogger();
}).As<ILogger>();
Run Code Online (Sandbox Code Playgroud)

虽然浓缩器看起来像

public class MyEnricherWhichCanAddMoreDataFromADependency : ILogEventEnricher
{
    public MyEnricherWhichCanAddMoreDataFromADependency(IDependency d) 
    { ... do stuff with the dependency ... }
}
Run Code Online (Sandbox Code Playgroud)

构造函数注入似乎不起作用。还是我做错了什么?

Tra*_*lig 5

当你丰富With<T>它所做的一切时,从字面上看,就是调用new T().

如果你想通过 DI 传递浓缩器,你需要自己做。

builder.Register((c, p) =>
{
  var e = c.Resolve<MyEnricherWhichCanAddMoreDataFromADependency>();
  return new LoggerConfiguration()
   .Enrich.FromLogContext()
   .Enrich.With(e)
   // ...
  .CreateLogger();
}).As<ILogger>();
Run Code Online (Sandbox Code Playgroud)