¿Qué marcos de inyección de dependencia de C # / .NET valen la pena analizar? ¿Y qué puedes decir sobre su complejidad y velocidad?
fuente
¿Qué marcos de inyección de dependencia de C # / .NET valen la pena analizar? ¿Y qué puedes decir sobre su complejidad y velocidad?
editar (no por el autor): hay una lista completa de los marcos de IoC disponibles en https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
La respuesta original sigue.
Supongo que podría ser un poco exigente aquí, pero es importante tener en cuenta que DI (Inyección de dependencia) es un patrón de programación y se ve facilitado por, pero no requiere, un marco IoC (Inversión de control). Los marcos de IoC simplemente hacen que la DI sea mucho más fácil y brindan una serie de otros beneficios además de la DI.
Dicho esto, estoy seguro de que eso es lo que estabas preguntando. Acerca de los marcos de IoC; Solía usar Spring.Net y CastleWindsor mucho, ¡pero el verdadero dolor detrás era toda esa molesta configuración XML que tenía que escribir! Casi todos se están moviendo de esta manera ahora, por lo que he estado usando StructureMap durante el último año más o menos, y dado que se ha movido a una configuración fluida usando genéricos fuertemente tipados y un registro, mi barrera de dolor al usar IoC se ha reducido a ¡bajo cero! Me encanta saber ahora que mi configuración de IoC está verificada en tiempo de compilación (en su mayor parte) y no he tenido más que alegría con StructureMap y su velocidad. No diré que los otros fueron lentos en tiempo de ejecución, pero fueron más difíciles de configurar y la frustración a menudo ganó el día.
Actualizar
He estado usando Ninject en mi último proyecto y ha sido un placer usarlo. Las palabras me fallan un poco aquí, pero (como decimos en el Reino Unido) este marco es 'los perros'. Lo recomendaría encarecidamente para cualquier proyecto de campo verde en el que desee estar en funcionamiento rápidamente. Obtuve todo lo que necesitaba de un fantástico conjunto de screencasts de Ninject de Justin Etheredge. No puedo ver que la adaptación de Ninject en el código existente sea un problema, pero lo mismo podría decirse de StructureMap en mi experiencia. Será una decisión difícil en el futuro entre esos dos, pero prefiero tener competencia que estancamiento y hay una buena cantidad de competencia saludable por ahí.
Otros screencasts de IoC también se pueden encontrar aquí en Dimecasts .
Depende de lo que esté buscando, ya que cada uno tiene sus pros y sus contras.
Spring.NET
es el más maduro ya que sale de Spring del mundo Java. Spring tiene un conjunto muy rico de bibliotecas de framework que lo extienden para admitir Web, Windows, etc.Castle Windsor
es uno de los más utilizados en la plataforma .NET y tiene el ecosistema más grande, es altamente configurable / extensible, tiene administración personalizada de por vida, soporte AOP, tiene soporte inherente de NHibernate y es un contenedor increíble. Windsor es parte de una pila completa que incluye monorraíl, registro activo, etc. NHibernate se construye sobre Windsor.Structure Map
tiene una configuración muy rica y fina a través de un DSL interno.Autofac
es un contenedor de IoC de la nueva era con todo su soporte de programación funcional inherente. También toma un enfoque diferente en la gestión de la vida que los demás. Autofac todavía es muy nuevo, pero empuja la barra de lo que es posible con IoC.Ninject
He escuchado más huesos desnudos con un enfoque menos es más (escuchado no experimentado).Unity
es: es de y es compatible con Microsoft (p & p). La unidad tiene muy buen rendimiento y excelente documentación. También es altamente configurable. No tiene todas las campanas y silbatos de decir Castle / Structure Map.En resumen, realmente depende de lo que sea importante para usted. Estoy de acuerdo con otros en ir, evaluar y ver cuál encaja. Lo bueno es que tienes una buena selección de donas en lugar de solo tener una gelatina.
Autofac. https://github.com/autofac/Autofac Es realmente rápido y bastante bueno. Aquí hay un enlace con comparaciones (hecho después de que Ninject reparó un problema de pérdida de memoria)
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
Ninject es genial. Parece realmente rápido, pero no he hecho ninguna comparación. Sé que Nate, el autor, hizo algunas comparaciones entre Ninject y otros marcos DI y está buscando más formas de mejorar la velocidad de Ninject.
He escuchado a muchas personas a las que respeto decir cosas buenas sobre StructureMap y CastleWindsor. Esos, en mi opinión, son los tres grandes a considerar en este momento.
Yo uso simple inyector :
Simple Injector es una biblioteca de inyección de dependencias fácil, flexible y rápida que utiliza las mejores prácticas para guiar sus soluciones hacia el pozo del éxito.
Soy un gran admirador de Castle. Me encantan las instalaciones que también ofrece más allá de la historia de IoC Container. Realmente simplifica el uso de NHibernate, el registro, AOP, etc. También uso Binsor para la configuración con Boo y realmente me he enamorado de Boo como lenguaje debido a ello.
Puedo recomendar Ninject. Es increíblemente rápido y fácil de usar, pero solo si no necesita la configuración XML, de lo contrario, debe usar Windsor.
Pasé la mayor parte del día luchando sin éxito para que el ejemplo más simple de Spring.NET funcionara. Nunca podría encontrar la manera de conseguir que encuentre mi ensamblado desde el archivo XML. En aproximadamente 2 horas, por otro lado, pude hacer que Ninject funcionara, incluida la integración de pruebas con NUnit y MSTest.
He usado Spring.NET en el pasado y tuve un gran éxito con él. Nunca noté una sobrecarga sustancial con él, aunque el proyecto en el que lo usamos fue bastante pesado por sí solo. Solo tomó un poco de tiempo leer la documentación para configurarla.
Lo mejor de C # es que sigue un camino recorrido por años de desarrolladores de Java anteriores. Por lo tanto, mi consejo, generalmente hablando cuando se buscan herramientas de esta naturaleza, es buscar la respuesta sólida de Java y ver si todavía existe una adaptación .NET.
Entonces, cuando se trata de DI (y hay tantas opciones, esto es realmente una cuestión de gustos) es Spring.NET . Además, siempre es aconsejable investigar a las personas detrás de los proyectos. No tengo problemas para sugerir productos SourceGear para el control de la fuente (fuera de usarlos) porque respeto a Eric Sink. He visto a Mark Pollack hablar y qué puedo decir, el tipo lo entiende.
Al final, hay muchos marcos DI y su mejor opción es hacer algunos proyectos de muestra con algunos de ellos y tomar una decisión informada.
¡Buena suerte!
Creo que un buen lugar para comenzar es con Ninject, es nuevo y ha tenido en cuenta muchos ajustes y es realmente rápido. Nate, el desarrollador, realmente tiene un gran sitio y un gran soporte.
Spring.Net es bastante sólido, pero la documentación tomó un tiempo para avanzar. Autofac es bueno, y aunque .Net 2.0 es compatible, necesita VS 2008 para compilarlo, o bien usar la línea de comandos para construir su aplicación.