unity ioc injection explicacion dependency control container c# inversion-of-control ioc-container

c# - injection - Codifique su propio contenedor de IOC



unity ioc (10)

Alguien ha escrito uno en C #: http://ninject.org/ .

Es de código abierto, así que puedes obtener el código y ver cómo lo hizo este tipo.

¿Alguien ha escrito su propio Contenedor de COI en C #? O la gran mayoría de la gente usa los diversos marcos como Spring. ¿Cuáles son los pros y los contras de cada uno?


James Kovacs presenta un episodio de dnrTV sobre este tema aquí . Aquí también escribió un artículo . Sin embargo, durante el artículo menciona que probablemente quieras utilizar uno de los preconstruidos. Ya que hay muchos estilos diversos para ellos. Ninject, StructureMap, Autofac usan una interfaz fluida. Spring, Castle Windsor y Unity tienen más configuraciones XML. Castle Windsor también puede usar boo como interfaz. Muchos tienen anzuelos a otros marcos como Unity a EntLib o Castle Windsor a Monorail y el resto del Proyecto Castle.

Entonces, a menos que realmente necesite o desee algo que no esté provisto por los marcos de IOC disponibles, entonces, ¿por qué no usar uno de ellos?



Autofac es excelente.

He escrito uno usando menos de 15 líneas. Solo dos métodos de extensión para un diccionario.


He escrito un contenedor IoC / DI en c # que implementa el localizador de servicios comunes. Lo escribí principalmente para fines de aprendizaje, pero cuando lo terminé, decidí hacerlo de código abierto. Si alguno de ustedes quisiera probar IInject , puede descargarlo aquí .



Si está buscando un contenedor IoC liviano y de alto rendimiento, entonces debería consultar Munq


Creé mi propio contenedor IoC que facilita la depuración de la creación del objeto (incluso cuando no tiene acceso al código del contenedor). Cuando se crea el objeto, al presionar Paso a (F11), aparece el código para crear el objeto. El código completo se puede ver aquí .


A menos que haya una muy buena razón, no reinventaría la rueda e implementaría un contenedor IoC, especialmente porque hay muchas opciones buenas como Unity , Ninject o Spring.net .

Si necesita / desea eliminar la dependencia a cualquiera de estos contenedores IoC, puede probar la interfaz Common Service Locator .


Es un buen ejercicio escribir el suyo propio, pero al final es posible que desee utilizar un contenedor existente. Puedes comenzar con esta en 15 líneas de código.