5

Soy muy nuevo en esto, así que tengan paciencia conmigo.Dependency Injection

Tengo una aplicación MVC que usa el patrón Service/Repository/EF4 y estoy tratando de usar Ninject. Lo tengo trabajando en los controladores, son constructores inyectados con servicios, pero los servicios son inyectores construidos con repositorios y no estoy seguro de dónde manejar esto.

Estoy tratando de hacerlo para que cada capa solo conozca la capa siguiente, ¿es correcto? Si es así, la aplicación MVC sólo sabe de la capa de servicios, y la capa de servicio sólo se sabe de la capa de repositorio, etc. Así que en mi Módulo Ninject donde estoy creando los enlaces, no puedo decir:

Bind(Of IRepository(Of Category)).To(Of EFRepository(Of Category)) 

¿Dónde manejo la inyección?

+0

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/ –

+0

relacionadas: http://stackoverflow.com/questions/4570750/dependency-injection-turtles-all-the- camino hacia abajo –

+0

Duplicado: http://stackoverflow.com/questions/1475575/where-should-i-do-dependency-injection-with-ninject-2 –

Respuesta

7

Los comentarios a su pregunta sí proporcionan cierta información útil.

que suelen organizar este tipo de cosas para lograr lo que estás hablando - es sólo una parte de la misma que se aplica directamente a la inyección de dependencias:

  • configurar mi solución de Visual Studio para tener un proyecto/montaje por capa en la aplicación. Teniéndolo de esta manera, debe establecer una referencia del proyecto de una capa a otra para poder llamar a esa capa. Por ejemplo, configura una referencia desde la capa de la aplicación MVC a la capa de servicio, pero no desde la aplicación MVC a la capa de repositorio, para evitar que la aplicación MVC acceda directamente a la capa de repositorio.
  • Dentro del proyecto de cada capa, pongo las interfaces y las clases que deben usarse en el espacio de nombres superior del proyecto, y pongo la implementación real de las interfaces y otras clases que deben estar ocultas en un espacio de nombres secundario, generalmente llamado "Impl" o algo así; Estas clases también se declaran como "internas", lo que garantiza que solo se pueden usar desde el ensamblaje (capa) y no desde otra capa por error.
  • Cada proyecto/capa declara un módulo de NInject que vincula las interfaces públicas a las clases de implementación interna.
  • En la raíz de composición de su aplicación (consulte el enlace de Mark Seeman: Where should I do Injection with Ninject 2+ (and how do I arrange my Modules?)), crea un kernel que carga estos módulos.
  • La inyección real se realiza principalmente con inyección de constructor, lo que significa que las clases mismas realmente no saben nada acerca de la inyección que tiene lugar (a veces tienes que usar el atributo [Inyectar], si tienes constructores ambiguos).
+0

Entonces cada proyecto ** tiene que tener ** un Módulo Ninject que configura los enlaces para la siguiente capa hacia abajo para mantener el acoplamiento flojo? Entonces, la raíz de la aplicación (Global.asax) configura el kernel con todos estos? Estoy un poco confundido acerca de cómo la aplicación MVC podría conocer el RepositoryNinjectModule? – Sam

Cuestiones relacionadas