Which.NET ¿Vale la pena investigar los marcos de inyección de dependencia? [cerrado]


¿Qué marcos de inyección de dependencias de C#/. NET vale la pena investigar? Y qué se puede decir sobre su complejidad y velocidad.

Author: John Saunders, 2008-08-22

12 answers

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 :

  • Castle Windsor - Castle Windsor es el mejor de su raza, inversión madura del contenedor de Control disponible para. NET y Silverlight
  • Unity - Contenedor de inyección de dependencias extensible ligero con soporte para la llamada al constructor, la propiedad y el método inyección
  • Autofac - Un contenedor CoI. NET adictivo
  • DryIoc - Contenedor IoC simple, rápido y con todas las funciones.
  • Ninject - El ninja de los inyectores de dependencia de. NET
  • StructureMap - El contenedor IoC/DI original para. Net
  • Spring.Net - Spring.NET es un marco de aplicaciones de código abierto que facilita la creación de aplicaciones empresariales. NET
  • LightInject - A ultra contenedor CoI ligero
  • Simple Injector - Simple Injector es una biblioteca de Inyección de dependencias (DI) fácil de usar para.NET 4+ que admite Silverlight 4+, Windows Phone 8, Windows 8, incluidas aplicaciones universales y Mono.
  • Microsoft.Ampliación.DependencyInjection - El contenedor IoC predeterminado para ASP.NET Aplicaciones principales.
  • Scrutor - Extensiones de exploración de ensamblaje para Microsoft.Ampliación.DependencyInjection.
  • VS MEF - Implementación del Marco de Extensibilidad administrada (MEF) utilizada por Visual Studio.
  • TinyIoC - Un contenedor de Control fácil de usar, sin complicaciones, para pequeños proyectos, bibliotecas y principiantes por igual.

La respuesta original sigue.


Supongo que podría estar siendo un poco exigente aquí, pero es importante tener en cuenta que DI (Inyección de dependencias) es un patrón de programación y se ve facilitado por, pero no requiere, un IoC (Inversión de Control) marco. Los marcos de IoC simplemente hacen que DI sea mucho más fácil y proporcionan una serie de otros beneficios por encima de DI.

Dicho esto, estoy seguro de que eso es lo que estabas preguntando. Acerca de IOC Frameworks; Solía usar Spring.Net y CastleWindsor mucho, pero el verdadero dolor en la parte posterior fue toda esa molesta configuración XML que tenía que escribir! Casi todos se están moviendo de esta manera ahora, así que he estado usando StructureMap durante el último año más o menos, y desde que se ha movido a un configuración fluida utilizando genéricos fuertemente tipeados y un registro, mi barrera de dolor en el uso de IoC ha caído a bajo cero! Me da una patada absoluta de saber ahora que mi configuración de IoC se comprueba en tiempo de compilación (en su mayor parte) y no he tenido nada 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 para mí y la frustración a menudo ganó el día.

Update

He estado usando Ninject en mi último proyecto y ha sido un absoluto placer de usar. 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 green fields en el que desee estar listo y funcionando rápidamente. Tengo todo lo que necesitaba de un fantástico conjunto de screencasts Ninject por Justin Etheredge. No puedo ver que la adaptación de Ninject al código existente sea un problema en absoluto, pero entonces lo mismo podría decirse de StructureMap en mi experiencia. Será una elección difícil en el futuro entre esos dos, pero prefiero tener competencia que estancamiento y hay una cantidad decente de competencia saludable por ahí.

También se pueden encontrar otros screencasts del CoI aquí en Dimecasts.

 309
Author: RobertTheGrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-24 05:04:55

Depende de lo que estés buscando, ya que cada uno tiene sus pros y sus contras.

  1. Spring.NET es el más maduro ya que sale de la primavera del mundo de Java. Spring tiene un conjunto muy rico de bibliotecas de marco que lo extienden para soportar 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 gestión de vida útil personalizada, soporte AOP, tiene inherente NHibernate apoyo y es un todo alrededor impresionante contenedor. Windsor es parte de una pila completa que incluye Monorraíl, Active Record, etc. NHibernate se construye sobre Windsor.
  3. Structure Map tiene una configuración muy rica y de grano fino a través de un DSL interno.
  4. Autofac es un contenedor de 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 útil que los demás. Autofac todavía está muy nuevo, pero empuja la barra en lo que es posible con el CoI.
  5. Ninject He oído es más huesos desnudos con un menos es más enfoque (oído no experimentado).
  6. El mayor discriminador de Unity es: es de y soportado por Microsoft (p & p). Unity tiene muy buen rendimiento y una gran documentación. También es altamente configurable. No tiene todas las campanas y silbatos de decir Castillo / Mapa de la estructura.

Así que en resumen, realmente depende sobre lo que es importante para ti. 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 solo tener que tener una gelatina.

 75
Author: Glenn Block,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-27 06:05:08

Autofac. https://github.com/autofac/Autofac Es muy rápido y bastante bueno. Aquí hay un enlace con comparaciones (hechas después de que Ninject arreglara un problema de fuga de memoria).

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

 35
Author: Pete,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-23 09:15:12

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 que respeto decir cosas buenas sobre StructureMap y CastleWindsor. Esos, en mi mente, son los tres grandes a mirar ahora mismo.

 18
Author: ScottKoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-21 22:00:12

Utilizo Inyector simple :

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 pozo del éxito.

 12
Author: Steven,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-20 11:18:55

Soy un gran fan de Castle. Me encantan las instalaciones que también ofrece más allá de la historia de contenedores del CoI. Realmente se simplifica usando NHibernate, logging,AOP, etc. También uso Binsor para la configuración con Boo y realmente me he enamorado de Boo como lenguaje debido a ello.

 8
Author: Chris Canal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-16 09:39:07

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.

 5
Author: Julio César,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-22 00:40:09

Pasé la mayor parte de un día luchando sin éxito para obtener lo más simple Spring.NET ejemplo de trabajo. Nunca pude averiguar cómo hacer 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.

 5
Author: outinsun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-22 17:35:59

He usado Spring.NET en el pasado y tuvo gran éxito con él. Nunca noté ningún gasto sustancial con él, aunque el proyecto en el que lo usamos era bastante pesado por sí solo. Solo tomó un poco de tiempo leer la documentación para configurarla.

 4
Author: Jason Sparks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-21 22:06:23

Lo bueno de C# es que está siguiendo un camino recorrido por años de desarrolladores de Java antes que él. Por lo tanto, mi consejo, en términos generales, al buscar herramientas de esta naturaleza, es buscar la respuesta sólida de Java y ver si existe una adaptación de.NET todavía.

Así que cuando se trata de DI (y hay tantas opciones por ahí, esto realmente es una cuestión de gusto) es Spring.NET . Además, siempre es aconsejable investigar a las personas detrás de los proyectos. No tengo problema en sugerir SourceGear productos para el control de fuentes (fuera de usarlos) porque tengo respeto por Eric Sink. He visto hablar a Mark Pollack y qué puedo decir, el tipo lo entiende.

Al final, hay muchos frameworks DI y su mejor apuesta es hacer algunos proyectos de muestra con algunos de ellos y hacer una elección educada.

¡Buena suerte!

 2
Author: Ian Patrick Hughes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-21 22:07:37

Creo que un buen lugar para comenzar es con Ninject, es nuevo y ha tenido en cuenta un montón de ajustes finos y es muy rápido. Nate, el desarrollador, realmente tiene un gran sitio y un gran apoyo.

 2
Author: Rob Bazinet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-22 00:37:04

Spring.Net es bastante sólido, pero la documentación tomó algún tiempo para vadear a través. Autofac es bueno, y mientras. Net 2.0 es compatible, necesita VS 2008 para compilarlo, o bien use la línea de comandos para compilar su aplicación.

 2
Author: David Robbins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-28 14:01:30