18 votes

Est-il possible d'injecter une liste d'objets résolus dans un constructeur en utilisant Autofac ?

Je suis nouveau dans Autofac (3) et je l'utilise pour trouver un certain nombre de classes dans plusieurs assemblées qui implémentent IRecognizer.

C'est ce que j'ai fait :

builder.RegisterAssemblyTypes(AppDomain.CurrentDomain.GetAssemblies()).As<IRecognizer>();

ce qui est très bien.

Mais j'aimerais injecter des références aux composants trouvés dans un constructeur - en quelque sorte :

public Detector(List<IRecognizer> recognizers)
{
    this.Recognizers = recognizers;
}

Existe-t-il un moyen de le faire ?

29voto

nemesv Points 71516

Autofac prend en charge les IEnumerable<T> en tant que type de relation :

Par exemple, lorsqu'Autofac est injecté dans le sang. IEnumerable<ITask> il ne recherchera pas un composant qui sup IEnumerable<ITask> . Au lieu de cela, le conteneur trouvera toutes les les implémentations de ITask et les injecter tous.

Modifiez donc votre constructeur en :

public Detector(IEnumerable<IRecognizer> recognizers)
{
    this.Recognizers = new List<IRecognizer>(recognizers);
}

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