¿Qué marcos de inyección de dependencia .NET vale la pena analizar? [cerrado]

Resuelto pbreault asked hace 16 años • 12 respuestas

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

pbreault avatar Aug 22 '08 04:08 pbreault
Aceptado

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 contenedor de inversión de control maduro y disponible para .NET y Silverlight.
  • Unity : 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
  • DryIoc : contenedor IoC simple, rápido y con todas las funciones.
  • Ninject : el ninja de los inyectores de dependencia .NET
  • Spring.Net : Spring.NET es un marco de aplicaciones de código abierto que facilita la creación de aplicaciones .NET empresariales.
  • Lamar : un contenedor de IoC rápido y muy optimizado para su uso en ASP.NET Core y otras aplicaciones del lado del servidor .NET.
  • LightInject : un contenedor IoC ultraligero
  • Simple Injector : 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 de IoC predeterminado para aplicaciones ASP.NET Core.
  • Scrutor : extensiones de escaneo de ensamblajes para Microsoft.Extensions.DependencyInjection.
  • VS MEF : implementación del marco de extensibilidad administrada (MEF) utilizada por Visual Studio.
  • TinyIoC : un contenedor de inversión de control fácil de usar y sin complicaciones para proyectos pequeños, bibliotecas y principiantes por igual.
  • Stashbox : un marco de inyección de dependencias liviano, rápido y portátil para soluciones basadas en .NET.

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 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 mucho Spring.Net y CastleWindsor , ¡pero el verdadero dolor detrás era toda esa molesta configuración XML que tenías que escribir! Prácticamente todos se están moviendo de esta manera ahora, así que he estado usando StructureMap 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 se ha reducido a ¡bajo 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 placer usarlo. 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 de Justin Etheredge. No veo que la adaptación de Ninject al código existente sea un problema en absoluto, pero en mi experiencia se podría decir lo mismo de StructureMap . 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 .

RobertTheGrey avatar Aug 21 '2008 22:08 RobertTheGrey

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

  1. Spring.NETes 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 Windsores 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 MapTiene una configuración muy rica y detallada a través de un DSL interno.
  4. Autofaces 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. NinjectHe oído que es más básico con un enfoque de menos es más (escuché, no experimenté).
  6. El mayor discriminador Unityes: es de y respaldado por Microsoft (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.

Glenn Block avatar Oct 22 '2008 18:10 Glenn Block

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

Pete avatar Aug 22 '2008 00:08 Pete