2012-02-25 10 views
7

Duplicar posible:
How do the major C# DI/IoC frameworks compare?¿Cómo elegir un contenedor DI?

habiendo tantos contenedores DI, me siento un poco perdido. Soy nuevo en el patrón DI.

Estoy leyendo el libro Dependency Injection in .NET y he encontrado que DI es increíblemente útil para mejorar una base de código, por lo que es flexible y más comprobable.

Ahora quiero presentar un contenedor DI para mi proyecto ficticio, pero hay muchos para elegir.

¿Cómo se supone que debo elegir entre Castle Windsor, Unity, StructureMap, Spring.NET, Autofac, Ninject, Funq, LinFu, etc., etc.?

Supongo que una toma coherente sería "solo elegir una" y comenzar a usarla (ya que supongo que son bastante fáciles de intercambiar, especialmente en las primeras etapas), pero me gustaría tomar una decisión más informada.

+0

Hagas lo que hagas, no elijas Funq, porque no admite la inyección automática del constructor, que básicamente lo descalifica para usarlo en cualquier proyecto real, o de hecho lo descalifica como un contenedor DI real. – Steven

Respuesta

5

Esto es como comprar un automóvil. Puede que te guste un Toyota, pero es solo un motor de 2.5 litros. Puede que te guste Ferrari, pero es demasiado rojo. Es posible que le guste Mazda, pero su jefe no le permite conducirlo. Puede que te guste Hummer, pero luego tus colegas se reirán de ti. Mezcle los fabricantes a su gusto, siempre habrá algo que le falte a alguien o en algún momento diferente.

Mi opinión es, en primer lugar, DI es generalmente mejor que no tener DI. Elige cualquier cosa y estarás mejor. Me quedaría con algo que:

  • tiene buen apoyo en la comunidad (para que pueda obtener respuestas)
  • tiene una buena compañía de respaldo detrás de él (por lo que no consigue volver a escribir el código cuando se declara en quiebra)
  • se siente bien a usted (por lo que no jurar delante de los niños, no fresco)
  • no es una exageración para el proyecto
  • no es sólo DI, pero ofrece un ecosistema de las cosas que se reduzca el tiempo que pasa en tareas que sabe que puede hacer, simplemente no ahora, y luego puede concentrarse en las cosas que importan
  • Es utilizado por mucha gente (para que sepa que muchas partes también se prueban en la vida real y se rellenan errores)
  • No tiene 5 años (como esa documentación dice que es compatible con Windows 98 o algo)

Mi 2 centavos - http://www.springframework.net/. Quiero decir, su documentation contents page tiene 20 páginas de largo ...

O simplemente puede ser que desee mirar algunos más respuestas a una pregunta similar:

2

Puede comenzar con DependencyResolver incorporado en MVC3. Más tarde puede actualizar fácilmente a Enterprise Library Unity DI.

Brad Wilson había mencionado una serie de publicaciones en How to use DI in MVC3.

-5

El contenedor DI más desarrollada para .NET es Managed Extensibility Framework (MEF) y recomiendo encarecidamente usarlo . MEF es rápido, fácil y fácil de mantener en todo el equipo junto con una curva de aprendizaje perfecta.

+6

* "El contenedor DI más desarrollado para .NET es MEF" *: esa declaración general no es cierta en absoluto. – BrokenGlass

+0

Acabo de compartir mi experiencia y he usado muchas soluciones DI antes. No importa ... – ogggre

+3

MEF no es un contenedor DI. MEF proporciona configuración de Plug and Play en la parte superior de una implementación base. (Como su nombre lo sugiere es un marco de extensibilidad no DI) – Manas

0

Mi opinión es, mira algunas: ya tienes el excelente libro "Dependency Injection in .NET" (a esa lista añadiría Ninject, que desafortunadamente no está cubierto en el libro) - y elige uno de ellos que entiendes lo mejor y te gusta la sintaxis Para comenzar con las funciones avanzadas no es realmente importante, solo que empiece.

Una vez que tiene un contenedor de IoC, reemplazarlo debería ser en su mayoría trivial, ya que todos sus cambios estarán en un lugar, la raíz agregada, y no se extenderán por toda la base de códigos. El uso de un contenedor de IoC también lo forzará a diseñar la inyección de dependencia, si no lo ha hecho aún, ese será el impacto mucho mayor en sus proyectos.

0

He estado usando Ninject y Unity. Cuando agrega Unity MVC a Unity, entonces el código me recuerda el código de Ninject.

Ambos son muy fáciles de implementar. Ambos permiten la sustitución de un archivo de configuración centrado por un centrador de clase de iniciador.

Sugiero crear un proyecto de 2 horas, implementarlo en cada uno de los marcos de ioc di y decidir por experiencia cuál te gusta. Sin embargo, si haces esto sin mirar otras características, es posible que te pierdas algo. Por lo tanto, mire las características de la periferia, como el soporte de terceros.

0

Además de los otros excelentes comentarios, si instala el paquete Unity.MVC3, solo tenga cuidado con que debe utilizar HierarchicalLifetimeManager si desea que sus objetos se eliminen con cada solicitud. Funcionó muy bien, pero creo que encontrarás que en la mayoría de los casos todos los principales son bastante agradables.

La pregunta para usted es encontrar una que se adapte a su entorno. Algunos lugares permiten el código abierto, otros no y en esos casos, la Unidad gana.

Cuestiones relacionadas