Pregunta

Estamos usando ASP.net MVC.

¿Cuál de estos es el mejor marco de trabajo Ninject o Unity y por qué?

¿Fue útil?

Solución

La última vez que miré a cualquiera de ellos encontré a Ninject un poco mejor. Pero ambos tienen sus inconvenientes.

Ninject tiene un mejor esquema de configuración fluida. La unidad parece depender principalmente de la configuración XML. El principal inconveniente de Ninject es que requiere que hagas referencia a Ninject.Core en todas partes de tu código para agregar atributos [Inject].

Si puedo preguntar, ¿por qué limita sus elecciones a estos dos? Creo que Castle.Windsor, Autofac y StructureMap son al menos tan buenos o mejores.

Otros consejos

Sé que esta es una vieja pregunta, pero aquí están mis pensamientos:

Personalmente me gusta Ninject. Me gustan las interfaces fluidas y evitar XML. Generalmente me gusta XML, pero no para este tipo de cosas de configuración. Especialmente cuando se trata de refactorizar, las interfaces fluidas hacen que sea más fácil de corregir.

Echo de menos ObjectFactory de StructureMap, pero hay soluciones sencillas para agregar eso a Ninject.

Como Jeffery señala, no tiene que usar el atributo [Inject] cuando solo tiene un constructor.

Descubrí que prefiero las interfaces fluidas no solo porque evitan XML, sino porque causan errores de tiempo de compilación cuando cambio algo que los afectó. La configuración XML no lo hace y cuanto menos tenga que recordar para cambiar, mejor estoy.

Ninject detecta dependencias circulares si usa Injection Constructors en lugar de Unity que, independientemente de la técnica de inyección, simplemente arroja una StackOverflowException que es extremadamente difícil de depurar.

Estoy de acuerdo con Mendelt, no hay " mejor " Marco DI. Solo depende de la situación y todos tienen pros y contras. Creo que David Hayden dijo en DotNet Rocks que Unity es la opción preferida si usa el resto de EntLib y está familiarizado con eso. Yo personalmente uso Unity porque a mi cliente le gusta el hecho de que dice Microsoft Enterprise Library (Unity) en las DLL, si obtiene lo que & # 180; estoy diciendo.

Utilizo ambas configuraciones xml para configurar las interfaces y sus implementaciones concretas, pero luego uso atributos en el código al inyectar, como:

<type type="ILogger" mapTo="EntLibLogger">
   <lifetime type="singleton"/>
</type>

y en código:

[InjectionConstructor]
public Repository([Dependency] ILogger logger)

Personalmente, creo que eso aclara lo que sucede, pero, por supuesto, uno podría argumentar que tendrá referencias a la unidad en toda su aplicación. & # 180; depende de usted.

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