A riesgo de entrar en territorio de guerra santa, ¿cuáles son las fortalezas y debilidades de estos marcos populares de DI / IoC, y podría uno ser fácilmente considerado el mejor? ..:
- Ninject
- Unidad
- Castillo Windsor
- Autofac
- EstructuraMapa
¿Hay otros marcos DI / IoC para C # que no haya enumerado aquí?
En el contexto de mi caso de uso, estoy creando una aplicación WPF de cliente y una infraestructura de servicios WCF / SQL, facilidad de uso (especialmente en términos de sintaxis clara y concisa), documentación consistente, buen soporte comunitario y rendimiento son factores importantes. En mi elección.
Actualizar:
Los recursos y las preguntas duplicadas citadas parecen estar desactualizadas. ¿Puede alguien con conocimiento de todos estos marcos presentarse y proporcionar una idea real?
Me doy cuenta de que es probable que la mayoría de las opiniones sobre este tema sea parcial, pero espero que alguien se haya tomado el tiempo de estudiar todos estos marcos y tener al menos una comparación generalmente objetiva.
Estoy bastante dispuesto a hacer mis propias investigaciones si esto no se ha hecho antes, pero asumí que esto era algo que al menos algunas personas ya habían hecho.
Segunda actualización
Si tiene experiencia con más de un contenedor DI / IoC, clasifique y resuma los pros y los contras de ellos, gracias. Este no es un ejercicio para descubrir todos los pequeños contenedores oscuros que la gente ha hecho, estoy buscando comparaciones entre los marcos populares (y activos).
Respuestas:
Si bien una respuesta integral a esta pregunta ocupa cientos de páginas de mi libro , aquí hay una tabla de comparación rápida en la que todavía estoy trabajando:
fuente
Me encontré con otra comparación de rendimiento (última actualización 10 de abril de 2014). Compara lo siguiente:
Aquí hay un resumen rápido de la publicación:
También puede intentar usar la Biblioteca de selector de servicios comunes y, con suerte, probar varias opciones y ver qué funciona mejor para usted.
Alguna información sobre la Biblioteca Selector de Servicio Común del sitio:
Actualizar
13.09.2011: Funq y Munq se agregaron a la lista de concursantes. Los gráficos también se actualizaron y Spring.NET se eliminó debido a su bajo rendimiento.
11/04/2011: "se agregó Simple Injector , el rendimiento es el mejor de todos los concursantes"
fuente
Solo lea este gran blog de comparación de contenedores .Net DI de Philip Mat.
Realiza algunas pruebas exhaustivas de comparación de rendimiento;
Recomienda Autofac ya que es pequeño, rápido y fácil de usar ... Estoy de acuerdo. Parece que Unity y Ninject son los más lentos en sus pruebas.
fuente
Descargo de responsabilidad: a principios de 2015, hay una gran comparación de las características de IoC Container de Jimmy Bogard , aquí hay un resumen:
Contenedores comparados:
El escenario es este: tengo una interfaz, IMediator, en la que puedo enviar una sola solicitud / respuesta o una notificación a múltiples destinatarios:
Luego creé un conjunto base de solicitudes / respuestas / notificaciones:
Estaba interesado en ver algunas cosas con respecto al soporte de contenedores para genéricos:
Configuración para la variación genérica (registro de controladores para INotification base / creación de canalizaciones de solicitud) Mis controladores son bastante sencillos, solo salen a la consola:
Autofac
Ninject
Inyector simple
EstructuraMapa
Unidad
Windsor
fuente
En realidad, hay toneladas de marcos IoC. Parece que cada programador intenta escribir uno en algún momento de su carrera. Quizás no para publicarlo, sino para aprender el funcionamiento interno.
Personalmente prefiero autofac ya que es bastante flexible y tiene una sintaxis que me conviene (aunque realmente odio que todos los métodos de registro sean métodos de extensión).
Algunos otros marcos:
fuente
RegisterControllers()
para MVC), así que pensé que valía la pena diseñar alrededor de ese caso. (Esto fue diseñado hace más de 5 años.)Bueno, después de buscar la mejor comparación que he encontrado hasta ahora es:
http://www.sturmnet.org/blog/2010/03/04/poll-ioc-containers-for-net
http://www.sturmnet.org/blog/2010/03/04/poll-results-ioc-containers-for-net
Fue una encuesta realizada en marzo de 2010.
Un punto de interés para mí es que las personas que han usado un Marco DI / IoC y les ha gustado / no les ha gustado, StructureMap parece estar en la cima.
También de la encuesta, parece que Castle.Windsor y StructureMap parecen ser los más favorecidos.
Curiosamente, Unity y Spring.Net parecen ser las opciones populares que generalmente no están de acuerdo. (Estaba considerando Unity por pereza (y soporte / insignia de Microsoft), pero ahora estaré mirando más de cerca a Castle Windsor y StructureMap).
Por supuesto, esto probablemente (?) No se aplica a Unity 2.0, que se lanzó en mayo de 2010.
Esperemos que alguien más pueda proporcionar una comparación basada en la experiencia directa.
fuente
Consulte para una comparación de net-ioc-frameworks en el código de google, incluidos linfu y spring.net que no están en su lista mientras escribo este texto.
Trabajé con spring.net: tiene muchas características (aop, bibliotecas, documentos, ...) y hay mucha experiencia en dotnet y el mundo java. Las características están modularizadas para que no tenga que tomar todas las características. Las características son abstracciones de problemas comunes como la extracción de bases de datos, la extracción de registros. sin embargo, es difícil hacer y depurar la configuración de IoC.
Por lo que he leído hasta ahora: si tuviera que elegirh para un proyecto pequeño o mediano, usaría ninject ya que la configuración ioc está hecha y se puede depurar en c #. Pero todavía no he trabajado con eso. para un sistema modular grande, me quedaría con spring.net debido a las bibliotecas de abstracción.
fuente