Pregunta

¿Qué marcos de inyección de dependencia de C#/.NET vale la pena analizar?¿Y qué puedes decir sobre su complejidad y velocidad?

¿Fue útil?

Solución

editar (no por el autor):Hay una lista completa de marcos de IoC disponibles en https://github.com/quozd/awesome-dotnet/blob/master/README.md#ioc:

  • Castillo de Windsor - Castle Windsor es el mejor contenedor de inversión de control maduro disponible para .NET y Silverlight.
  • Unidad - Contenedor ligero y extensible de inyección de dependencias con soporte para inyección de llamadas a constructores, propiedades y métodos
  • autofac - Un contenedor .NET IoC adictivo
  • secoIoc - Contenedor IoC simple, rápido y con todas las funciones.
  • Ninject - El ninja de los inyectores de dependencia .NET
  • EstructuraMapa - El contenedor IoC/DI original para .Net
  • primavera.net - Spring.NET es un marco de aplicación de código abierto que facilita la creación de aplicaciones .NET empresariales.
  • Inyección de luz - Un contenedor IoC ultraligero
  • Inyector sencillo - Simple Injector es una biblioteca de inyección de dependencia (DI) fácil de usar para .NET 4+ que admite Silverlight 4+, Windows Phone 8, Windows 8, incluidas aplicaciones universales y Mono.
  • Microsoft.Extensions.DependencyInjection - El contenedor IoC predeterminado para aplicaciones ASP.NET Core.
  • escrutador - Extensiones de escaneo de ensamblajes para Microsoft.Extensions.DependencyInjection.
  • VS MEF - Implementación del Managed Extensibility Framework (MEF) utilizado por Visual Studio.
  • pequeñoIoC - Un contenedor de inversión de control fácil de usar y sin complicaciones para proyectos pequeños, bibliotecas y principiantes por igual.

La respuesta original sigue.


Supongo que podría estar siendo un poco quisquilloso 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 un marco IoC (Inversión de Control), pero no lo requiere.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 preguntabas.Acerca de los marcos de COI;Solía ​​usar primavera.net y CastilloWindsor mucho, pero el verdadero problema fue toda esa molesta configuración XML que tuviste que escribir.Casi todos se están moviendo de esta manera ahora, así que he estado usando EstructuraMapa durante el último año, y desde que pasó a una configuración fluida usando genéricos fuertemente tipados y un registro, ¡mi barrera contra el dolor al usar IoC ha caído a menos de cero!Me encanta saber ahora que mi configuración de IoC se verifica 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 demás eran lentos en tiempo de ejecución, pero me resultaron más difíciles de configurar y la frustración a menudo venció.

Actualizar

he estado usando Ninject en mi último proyecto y ha sido un absoluto placer utilizarlo.Aquí me faltan un poco las palabras, pero (como decimos en el Reino Unido) este marco es "los perros".Lo recomendaría ampliamente para cualquier proyecto de campos verdes en el que desee comenzar a funcionar rápidamente.Obtuve todo lo que necesitaba de un fantástico conjunto de screencasts de Ninject por Justin Etheredge.No veo que la adaptación de Ninject al código existente sea un problema en absoluto, pero lo mismo podría decirse de EstructuraMapa en mi experiencia.Será una elección difícil entre esos dos, pero prefiero tener competencia que estancamiento y hay una cantidad decente de competencia sana por ahí.

También se pueden encontrar otros screencasts de IoC aquí en Dimecasts.

Otros consejos

Depende de lo que busques, cada uno tiene sus pros y sus contras.

  1. Spring.NET es el más maduro ya que sale de Spring del mundo Java.Spring tiene un conjunto muy rico de bibliotecas de marco que lo amplían para admitir Web, Windows, etc.
  2. 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 de vida personalizada, soporte AOP, tiene soporte inherente para NHibernate y es un contenedor increíble en todos los aspectos.Windsor es parte de una pila completa que incluye Monorail, Active Record, etc.El propio NHibernate se construye sobre Windsor.
  3. Structure Map Tiene una configuración muy rica y detallada a través de un DSL interno.
  4. Autofac es un contenedor IoC de la nueva era con todo su soporte de programación funcional inherente.También adopta un enfoque diferente al de los demás en la gestión de la vida.Autofac todavía es muy nuevo, pero supera el listón de lo que es posible con IoC.
  5. Ninject He oído que es más básico con un enfoque de menos es más (escuché, no experimenté).
  6. El mayor discriminador de Unity es:Es de Microsoft y está respaldado por él (p&p).Unity tiene muy buen rendimiento y excelente documentación.También es altamente configurable.No tiene todas las comodidades de, por ejemplo, Castillo/Mapa de estructura.

En resumen, realmente depende de lo que es importante para ti.Estaría 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 tener que comer simplemente una de gelatina.

Autofac. https://github.com/autofac/Autofac Es realmente rápido y bastante bueno.Aquí hay un enlace con comparaciones (realizadas después de que Ninject solucionó un problema de pérdida de memoria).

http://www.codinginstinct.com/2008/05/ioc-container-benchmark-rerevisted.html

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 oído a mucha gente a la que respeto decir cosas buenas sobre StructureMap y CastleWindsor.Estos, en mi opinión, son los tres grandes a considerar en este momento.

yo suelo Inyector sencillo:

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 é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.yo también uso Binsor para la configuración con Boo y realmente me enamoré de Boo como lenguaje por eso.

Puedo recomendar Ninject.Es increíblemente rápido y fácil de usar, pero solo si no necesita configuración XML; de lo contrario, debería usar Windsor.

Pasé la mayor parte del día luchando sin éxito para que funcionara el ejemplo más simple de Spring.NET.Nunca pude descubrir cómo hacer que encuentre mi ensamblaje en el archivo XML.Por otro lado, en aproximadamente 2 horas, pude hacer que Ninject funcionara, incluida la integración de pruebas con NUnit y MSTest.

he usado Primavera.NET en el pasado y tuvo un gran éxito con él.Nunca noté ningún gasto importante con él, aunque el proyecto en el que lo usamos era bastante pesado por sí solo.Sólo tomó un poco de tiempo leer el documentación para configurarlo.

Lo mejor de C# es que sigue un camino recorrido por años de desarrolladores de Java.Entonces, mi consejo, en términos generales cuando se buscan herramientas de esta naturaleza, es buscar la respuesta sólida de Java y ver si existe todavía una adaptación de .NET.

Entonces, cuando se trata de DI (y hay tantas opciones disponibles, esto realmente es una cuestión de gustos) es Primavera.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 fuentes (aparte de usarlos) porque respeto a Eric Sink.He visto hablar a Mark Pollack y qué puedo decir, el tipo simplemente lo entiende.

Al final, hay muchos marcos DI y lo mejor que puede hacer 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, 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 tomó algún tiempo revisar la documentación.Autofac es bueno y, aunque se admite .Net 2.0, necesita VS 2008 para compilarlo o utilizar la línea de comandos para crear su aplicación.

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