2009-08-19 8 views
8

J'ai une interface générique, IValidator. Je veux être en mesure d'utiliser StructureMap pour récupérer une liste de toutes les classes qui mettent en œuvre IValidator pour un T. type donné, par exemple,Puis-je utiliser StructureMap pour renvoyer toutes les implémentations d'une interface générique pour un paramètre de type spécifique?

var PersonValidators = ObjectFactory.GetAllInstances<IValidator<Person>>(); 
var AddressValidators = ObjectFactory.GetAllInstances<IValidator<Address>>(); 

Je sais comment récupérer toutes les classes qui mettent en œuvre IValidator mais je dois filtrer par le type du paramètre type.

Quelqu'un peut-il me donner des conseils ou des suggestions?

Merci.

Répondre

11

Cela fonctionnera exactement comme votre exemple. Vous devez juste vous assurer que les instances sont enregistrées avec le conteneur. L'one-way est de rechercher les types:

ObjectFactory.Initialize(x => 
{ 
    x.Scan(scan => 
    { 
     scan.TheCallingAssembly(); 
     scan.WithDefaultConventions(); 
     scan.AddAllTypesOf<IValidator<Person>>(); 
     scan.AddAllTypesOf<IValidator<Address>>(); 
    }); 
}); 

var PersonValidators = ObjectFactory.GetAllInstances<IValidator<Person>>(); 
Questions connexes