2011-04-13 10 views
9

Tengo un sistema de complemento que permite al usuario elegir el tipo de complemento que desea crear (básicamente, esto configura una instancia de complemento).StructureMap obtener tipos registrados, no instancias

Eligen el tipo de complemento de una lista de selección. Estoy usando StructureMap para inyectar un IEnumerable en mi controlador MVC para que pueda acceder al nombre de tipo FQ para usar en la lista de selección.

Esto funciona bien, pero realmente no me gusta tener que crear una instancia de todos los complementos registrados solo para mostrar una lista de ellos en una lista de selección.

Entonces, la pregunta es, ¿puedo acceder a los tipos de IPlugin que están registrados con StructureMap?

Respuesta

13

Usted debe ser capaz de obtener la información de instancia mediante la propiedad Modelo del contenedor:

IContainer container = ObjectFactory.Container; 
IEnumerable<InstanceRef> instances = container.Model.AllInstances. 
    Where(i => i.PluginType.Equals(typeof(IPlugin))); 

Se puede acceder al tipo de hormigón usando:

foreach(var instanceRef in instances) 
    Console.WriteLine(instanceRef.ConcreteType); 
+0

Eso funcionó. Gracias. –

Cuestiones relacionadas