patron - manejo de dependencias c#
¿Qué marcos de inyección de dependencias.NET son dignos de ver? (12)
Autofac. Autofac Es realmente rápido y bastante bueno. Aquí hay un enlace con comparaciones (realizado después de que Ninject solucionó un problema de pérdida de memoria).
http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html
¿Qué marcos de inyección de dependencias C # / .NET son dignos de ver? Y qué puedes decir sobre su complejidad y rapidez.
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.
Depende de lo que esté buscando, ya que cada uno tiene sus pros y sus contras.
-
Spring.NET
es la más madura, ya que viene de Spring del mundo Java. Spring tiene un conjunto muy rico de bibliotecas de marcos que lo extienden a Internet, 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, cuenta con administración personalizada de por vida, soporte AOP, soporte inherente de NHibernate y es un contenedor impresionante. Windsor es parte de una pila completa que incluye Monorail, Active Record, etc. NHibernate se construye sobre Windsor. -
Structure Map
tiene una configuración muy rica y precisa a través de un DSL interno. -
Autofac
es un contenedor IoC de la nueva era con todo su soporte de programación funcional inherente. También tiene un enfoque diferente en la gestión de la vida que los otros. Autofac es todavía muy nuevo, pero empuja la barra hacia lo que es posible con IoC. -
Ninject
que he escuchado es másNinject
con menos es más acercamiento (oído no experimentado). - El mayor discriminador de
Unity
es: es de y es compatible con Microsoft (p & p). Unity tiene muy buen rendimiento y gran documentación. También es altamente configurable. No tiene todas las campanas y silbidos de decir Castle / Structure Map.
Entonces, en resumen, realmente depende de lo que es importante para usted. Estaría de acuerdo con otros en ir y evaluar y ver cuál encaja. Lo bueno es que tienes una buena selección de donas en lugar de tener que tener una gelatina.
He usado Spring.Net en el pasado y tuve un gran éxito con él. Nunca noté una sobrecarga sustancial, aunque el proyecto en el que lo usamos fue bastante pesado por sí solo. Solo tomó un poco de tiempo leer la documentation para configurarlo.
Lo mejor de C # es que está siguiendo un camino trillado por los años de desarrolladores de Java anteriores. Por lo tanto, mi consejo, en general cuando se buscan herramientas de esta naturaleza, es buscar la respuesta Java sólida y ver si existe una adaptación de .NET todavía.
Entonces, cuando se trata de DI (y hay muchas opciones por ahí, esta es una cuestión de gustos) es Spring.Net . Además, siempre es aconsejable investigar a las personas detrás de los proyectos. No tengo ningún problema en sugerir productos SourceGear para el control de la fuente (aparte de usarlos) porque respeto a Eric Sink. He visto hablar a Mark Pollack y qué puedo decir, el chico simplemente lo entiende.
Al final, hay una gran cantidad de marcos DI y su mejor opción es hacer algunos proyectos de muestra con algunos de ellos y hacer una elección educada.
¡Buena suerte!
Ninject es genial. Parece muy 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 los que hay que mirar ahora mismo.
Pasé la mayor parte del día luchando sin éxito para que funcionara el ejemplo más simple de Spring.NET. Nunca podría imaginar cómo conseguir que encuentre mi ensamblaje desde el archivo XML. En aproximadamente 2 horas, por otro lado, pude hacer funcionar Ninject, incluyendo la integración de pruebas con NUnit y MSTest.
Puedo recomendar Ninject. Es increíblemente rápido y fácil de usar, pero solo si no necesita una configuración XML, de lo contrario debería usar Windsor.
Soy un gran fan de Castle. Me encantan las instalaciones que también proporciona 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 un lenguaje debido a eso.
Spring.Net es bastante sólida, pero la documentación tomó algún tiempo para leer. Autofac es bueno y, aunque .Net 2.0 es compatible, necesita VS 2008 para compilarlo, o bien use la línea de comandos para construir su aplicación.
Yo uso Simple Injector :
Simple Injector es una biblioteca de inyección de dependencia fácil, flexible y rápida que utiliza las mejores prácticas para guiar sus soluciones hacia el hoyo del éxito.
Editar (no por el autor): hay una lista completa de marcos de trabajo de IoC disponibles en https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc :
- Castle Windsor - Castle Windsor es el mejor contenedor de inversión de control maduro disponible para .NET y Silverlight
- Unity : contenedor ligero de inyección de dependencia extensible con soporte para constructor, propiedad y método de inyección de llamada
- Autofac - Un contenedor adictivo .NET IoC
- DryIoc : contenedor IoC completo y rápido, completamente equipado.
- Ninject - El ninja de los inyectores de dependencia .NET
- StructureMap - El contenedor original de IoC / DI para .Net
- Spring.Net - Spring.NET es un marco de aplicación de código abierto que facilita la creación de aplicaciones .NET empresariales
- LightInject - Un contenedor IoC ultra ligero
- Simple Injector : Simple Injector es una biblioteca fácil de usar de Dependency Injection (DI) para .NET 4+ que admite Silverlight 4+, Windows Phone 8, Windows 8, incluidas las aplicaciones Universal y Mono.
- Microsoft.Extensions.DependencyInjection : el contenedor IoC predeterminado para las aplicaciones Core de ASP.NET.
- Scrutor - Extensiones de escaneo de ensamblaje para Microsoft.Extensions.DependencyInjection.
- VS MEF - Implementación del marco de extensibilidad gestionada (MEF) utilizada por Visual Studio.
- TinyIoC : un contenedor de control de inversión fácil de usar y sin complicaciones para proyectos pequeños, bibliotecas y principiantes por igual.
La respuesta original sigue.
Supongo que podría ser un poco delicado aquí, pero es importante tener en cuenta que DI (Dependency Injection) es un patrón de programación y está facilitado por, pero no requiere, un marco IoC (Inversión de Control). Los marcos de IoC 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 mucho Spring.Net y CastleWindsor , ¡pero el verdadero dolor en el fondo era todo lo molesto de la configuración XML que tenías que escribir! Casi todos se están moviendo de esta manera ahora, así que he estado usando StructureMap durante el último año, y como se ha movido a una configuración fluida usando genéricos fuertemente tipificados y un registro, mi barrera al usar IoC se ha reducido a ¡bajo cero! Me da una sensación absoluta de saber ahora que mi configuración de IoC se verifica en tiempo de compilación (en su mayor parte) y no tengo más que alegría con StructureMap y su velocidad. No diré que los demás fueron lentos en el tiempo de ejecución, pero fueron más difíciles de configurar y la frustración a menudo me 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 quiera 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 el Ninject de ajuste retroactivo en el código existente sea un problema, pero en mi experiencia se podría decir lo mismo de StructureMap . Será una decisión difícil avanzar entre los dos, pero prefiero tener competencia que estancamiento y hay una cantidad decente de competencia sana por ahí.
También se pueden encontrar otros screencast de IoC aquí en Dimecasts .