Pregunta

Estoy relativamente familiarizado con los conceptos de contenedores DI / IOC que han trabajado en proyectos anteriormente donde su uso ya estaba en su lugar. Sin embargo, para este nuevo proyecto, no existe un marco existente y tengo que elegir uno.

En pocas palabras, hay algunos escenarios en los que configuraremos varias implementaciones para una interfaz determinada. Echando un vistazo por la web, parece que usar cualquiera de los marcos principales para enlazar selectivamente a una de las implementaciones es bastante simple.

Sin embargo, existen contextos en los que tendremos que ejecutar ALL las implementaciones configuradas. He revisado todas las publicaciones etiquetadas por el COI aquí y estoy tratando de revisar la documentación de los principales marcos (hasta ahora mirando Unity, Ninject y Windsor), pero los documentos a menudo son escasos y no tengo tiempo para inspeccionar fuente para todos los paquetes.

Entonces, ¿hay algún contenedor IOC convencional que me permita vincularme a todos los tipos concretos configurados para uno de mis servicios?

¿Fue útil?

Solución

Una cosa que me sorprendió la primera vez que estaba tratando de resolver todas las implementaciones de un tipo registrado fue que los registros de tipo sin nombre (predeterminado) no se devolverán cuando llame a ResolveAll (). Solo se devuelven instancias con nombre.

Entonces:

IUnityContainer container = new UnityContainer();
container.RegisterType<IMyInterface, MyFirstClass>();
container.RegisterType<IMyInterface, MySecondClass>("Two");
container.RegisterType<IMyInterface, MyThirdClass>("Three");

var instances = container.ResolveAll<IMyInterface>();

Assert.AreEqual(2, instances.Count, "MyFirstClass doesn't get constructed");

Otros consejos

Así que de alguna manera me perdí este mi primer pase mirando a través de Unity de alguna manera ... pero responderé mi propia pregunta.

La unidad tiene precisamente lo que quería. http://msdn.microsoft.com/en-us/library/cc440943. aspx

Además, para cualquiera que esté cazando y bailando como yo en el COI, este enlace resultó ser invaluable. http: / /blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top