2 votes

Injecter une dépendance dans un enrichisseur SeriLog avec autofac

Je veux créer un Enrichisseur Serilog injecter des données à partir d'une dépendance. Comment autofac peut-il injecter ma dépendance dans un enrichisseur ?

Voici la configuration de mon conteneur :

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

Alors que l'enrichisseur ressemblerait à quelque chose comme

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

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

3voto

Travis Illig Points 6435

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

Si vous voulez faire passer l'enrichisseur par 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>();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X