J'ai eu une interface comme celle-ci et une classe p> je veux structure de structure pour remplir l'argument de constructeur sur l'écrivain Tous les Iwriter enregistrés.
J'ai enregistré les différents écrivains avec p> si appelant p> renvoie une exception "aucune instance par défaut définie pour PlugInfamily System.Collections.Generic.Inienmere`1 [[iwriter ..]] " em> (nom de classe édité) p> n'importe quel tour pour le faire automatiquement? ou devrai-je faire une méthode d'usine personnalisée? p> p>
4 Réponses :
Je pense que ce que cela vous dit, c'est que vous devez définir l'un de ces iyroils comme défaut. Imaginez une classe différente présentant le contrecoupeur suivant:
public class Test{ public Test(IWriter writer){} }
Lorsque vous souhaitez que toutes les instances concrètes d'un type à injecter, vous devez déclarer le paramètre en tant que tableau. Vous pouvez corriger votre problème en modifiant votre constructeur sur:
StructureMap.ObjectFactory.Initialize(x => { x.Scan(scan => { scan.TheCallingAssembly(); scan.AddAllTypesOf<IWriter>(); }); });
I Dupliquiez votre problème et je pense que votre code fonctionnera si vous modifiez votre classe consommatrice de IWRITER pour avoir un CTOR qui prend un éventail de iwriter.
public class WriterMerger { public WriterMerger(IWriter[] writers) }
En réalité, cela peut être fait sans changer votre constructeur
Changer votre configuration de conteneur sur: P>
StructureMap.ObjectFactory.Initialize(x => { x.Scan(scan => { scan.TheCallingAssembly(); scan.AddAllTypesOf<IWriter>(); }); x.ForRequestedType<IEnumerable<IWriter>>() .TheDefault.Is.ConstructedBy(x => ObjectFactory.GetAllInstances<IWriter>()); });
Bien que cela nécessite un peu plus de spécifications, cette approche est moins couplée à la condition de StructureMap de spécifier la collection en tant que tableau et reçoit donc un +1 de moi.
Pour ceux qui utilisent SM3, il ressemble à andréquestype <> code> a été supprimé.
Je n'ai pas utilisé SM dans un moment, mais je crois que la prérequéetype <> est maintenant juste pour <>