使用 autofac 在 SeriLog enricher 中注入依赖项
Inject a dependency in a SeriLog enricher with autofac
我想创建一个 Serilog Enricher 从依赖项中注入一些数据。 autofac 如何将我的依赖项注入到 enricher 中?
这是我的容器设置:
builder.Register((c, p) =>
{
return new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.With<MyEnricherWhichCanAddMoreDataFromADependency>()
// ...
.CreateLogger();
}).As<ILogger>();
虽然浓缩器看起来像
public class MyEnricherWhichCanAddMoreDataFromADependency : ILogEventEnricher
{
public MyEnricherWhichCanAddMoreDataFromADependency(IDependency d)
{ ... do stuff with the dependency ... }
}
构造函数注入似乎不起作用。还是我做错了什么?
当您丰富 With<T>
它所做的一切时,从字面上看,is calling new T()
。
如果你想通过 DI 传递 enricher,你需要自己做。
builder.Register((c, p) =>
{
var e = c.Resolve<MyEnricherWhichCanAddMoreDataFromADependency>();
return new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.With(e)
// ...
.CreateLogger();
}).As<ILogger>();
我想创建一个 Serilog Enricher 从依赖项中注入一些数据。 autofac 如何将我的依赖项注入到 enricher 中?
这是我的容器设置:
builder.Register((c, p) =>
{
return new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.With<MyEnricherWhichCanAddMoreDataFromADependency>()
// ...
.CreateLogger();
}).As<ILogger>();
虽然浓缩器看起来像
public class MyEnricherWhichCanAddMoreDataFromADependency : ILogEventEnricher
{
public MyEnricherWhichCanAddMoreDataFromADependency(IDependency d)
{ ... do stuff with the dependency ... }
}
构造函数注入似乎不起作用。还是我做错了什么?
当您丰富 With<T>
它所做的一切时,从字面上看,is calling new T()
。
如果你想通过 DI 传递 enricher,你需要自己做。
builder.Register((c, p) =>
{
var e = c.Resolve<MyEnricherWhichCanAddMoreDataFromADependency>();
return new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.With(e)
// ...
.CreateLogger();
}).As<ILogger>();