2017-08-19 1 views
2

Je souhaite créer un Serilog Enricher en injectant des données d'une dépendance. Comment autofac peut-il injecter ma dépendance dans un énricher?Injecter une dépendance dans un enricher SeriLog avec autofac

Ceci est ma configuration du conteneur:

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

Alors que le enrichisseur ressemblerait à quelque chose comme

public class MyEnricherWhichCanAddMoreDataFromADependency : ILogEventEnricher 
{ 
    public MyEnricherWhichCanAddMoreDataFromADependency(IDependency d) 
    { ... do stuff with the dependency ... } 
} 

injection Constructor ne semble pas fonctionner. Ou est-ce que je fais quelque chose de mal?

Répondre

3

Lorsque vous enrichissez With<T> tout ce qu'il fait, littéralement, is calling new T().

Si vous voulez passer l'enricher à DI, vous devez le faire vous-même.

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