2009-08-19 11 views
8

Tengo una interfaz genérica, IValidator. Quiero ser capaz de utilizar StructureMap para recuperar una lista de todas las clases que implementan IValidator para un determinado tipo T. Por ejemplo,¿Puedo usar StructureMap para devolver todas las implementaciones de una interfaz genérica para un parámetro de tipo específico

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

sé cómo recuperar todas las clases que implementan IValidator pero necesito filtrarla por el tipo del parámetro tipo.

¿Alguien me puede dar alguna orientación o sugerencia?

Gracias.

Respuesta

11

Funcionará exactamente como en su ejemplo. Solo tiene que asegurarse de que las instancias estén registradas en el contenedor. Una forma es buscar los tipos:

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

var PersonValidators = ObjectFactory.GetAllInstances<IValidator<Person>>(); 
Cuestiones relacionadas