.net - ioc - unity container
Injector simple vs Hiro vs Autofac (1)
Soy nuevo en DI y IoC y estoy tratando de decidir qué contenedor de IoC aprender. He visto varias comparaciones de rendimiento en las que los tres contenedores a los que se hace referencia parecen funcionar muy bien. Sin embargo, no he encontrado comparaciones de funciones que incluyan Hiro o Simple Injector. La comunidad para Autofac parece ser la más grande, pero Hiro y Simple Injector son increíblemente rápidos en los puntos de referencia y Simple Injector en particular afirma ser muy fácil de aprender. Dicho esto, no quiero aprender uno y tengo que cambiar a otro porque el conjunto de funciones es limitado. Por ese motivo, me inclino por Autofac, ya que es bastante maduro y está completo (buen artículo here y here ), además de ser uno de los contenedores IoC más rápidos disponibles. ¿Alguien ha tenido experiencia con al menos dos de los tres de estos contenedores? ¿Puedes ofrecer alguna comparación de características?
Permítanme comenzar diciendo que soy el desarrollador líder detrás de Simple Injector .
Estoy de acuerdo con Mark en que, en la mayoría de los casos, el rendimiento de un contenedor no es un problema. Sin embargo, algunos contenedores tienen un rendimiento muy bajo en algunos puntos y puede ser difícil percibir intuitivamente qué partes de la configuración pueden ser problemáticas desde la perspectiva del rendimiento. La mayoría de los problemas de rendimiento se pueden solucionar cambiando la configuración (cambiando los registros a singleton, agregando el almacenamiento en caché, etc.), sin importar qué contenedor use. En ese punto, sin embargo, puede ser realmente complicado configurar un contenedor. Es esta complejidad la que intentamos resolver con Simple Injector. Me gusta dejar que otros decidan si tuvimos éxito (o si es útil having un contenedor DI o otro contenedor DI).
Sin embargo, el rendimiento no era tan alto en mi lista inicial cuando comencé el proyecto (la simplicidad era), pero el diseño (sin bloqueo y basado en el árbol de Expression
) me permitió realizar optimizaciones que lo convierten en uno de los contenedores más rápidos del campo (aunque sigue siendo muy rico en características y muy extensible). En la mayoría de los casos, el rendimiento está muy cerca de crear nuevas instancias a mano.
Dicho esto, todavía se necesita más tiempo para aprender la inyección de dependencia como un patrón que para aprender a trabajar con un contenedor DI particular ( el libro de Mark puede ayudar realmente con ambos). Un contenedor -incluso Simple Injector- no lo ayudará a comprender DI y SOLID (sin embargo, algunas de sus restricciones intentan presionarlo para que tenga un diseño de aplicación limpio).
Simple Injector es bastante nuevo (o tardío) en la escena DI. Debido a esto, no hay mucha comparación entre este y otros (aunque hay algunos here y aquí ) y el número de usuarios es limitado en comparación con otros marcos, pero aumenta rápidamente (y según una encuesta antigua de Roy Osherove , Simple Injector había una cuota de mercado en ese momento de alrededor del 4%). Es una pena que Simple Injector no se compare mucho, porque es capaz de mucho (solo busque por ejemplo en la sección de escenarios avanzados en la documentación). Falta el Inyector simple en la comparación que vinculó en ( here y here ), así que aquí está la lista de características para el Inyector simple (pero tenga en cuenta que el Inyector simple se agrega a una de las comparaciones más nuevas del autor ):
- Marco : Inyector simple
- Versión : 3.0
- Licencia : MIT
- Dlls mínimo : 1
- Tamaño : 342 KB
- Fluido : no es necesario, solo programático
- Registro automático: included
- Uso de atributos : no incluido (pero es posible por extensión )
- Uso de XML : no soportado
- Inyección de propiedad : sí (Opt-in) .
- Inyección de constructor : yes
- Constructores múltiples : no incluidos, pero extendable
- Dependencia recursiva : error significativo
- Singleton : yes
- Transitoria : yes
- Otro / Custom : si, enchufable
- Instancias personalizadas : soportadas
- Genéricos abiertos : included
- Resolución de tipo no registrado : yes
- Auto-burlón : no incluido , pero extendable .
- Características especiales : Servicios de diagnóstico , registro de decoradores para tipos genéricos, genéricos de apertura parcial, registro y rendimiento condicional / contextual . Hay paquetes de extensiones de NuGet para estilos de vida como Web Request y Lifetime Scoping . La API basada en
Expression
permite agregar soporte para casi cualquier escenario avanzado , como la interception (aunque se promueve el uso de decoradores).
No tengo idea de cuáles son sus requisitos, pero apuesto a que Simple Injector puede servirle durante toda la vida de su proyecto. Si tiene problemas, simplemente pregunte aquí en .com o en el foro de Simple Injector . Los colaboradores del Inyector simple y otros entusiastas con gusto lo ayudarán. Y no olvide que hay una gran cantidad de usuarios de que pueden ayudarlo con los problemas generales de DI.