2008-11-27 21 views
9

Los ejemplos que puedo encontrar utilizan una arquitectura de dos capas, donde los controladores usan directamente las clases de repositorio en la capa de acceso a datos. Ver here o here.¿Cómo se usa Autofac en una aplicación web de 3 capas (ASP.NET MVC)?

¿Dónde registraría componentes de la capa de acceso a datos si tiene un servicio o una capa de lógica de negocios que utiliza esos componentes? La capa de acceso a datos idealmente no debería referenciarse desde la capa de interfaz de usuario, ¿verdad? Entonces Application_Start no sería el lugar correcto para hacerlo.

¿Cuál sería una mejor manera?

¡Gracias!

+0

Lo siento, no tengo ninguna respuesta para su pregunta, pero el enlace a esta aplicación de MVC Commerce que proporcionó fue muy informativo y profundo, así que gracias. :) – Franck

Respuesta

7

Algo tiene que saber sobre qué implementaciones desea usar. Hay típicamente 3 maneras de lograr esto:

  1. en tiempo de compilación, que es lo que utiliza Autofac
  2. en tiempo de ejecución del archivo de configuración predefinido que el castillo de Windsor puede hacer
  3. en tiempo de ejecución con un configuartion Dyanamic

Con Autofac tiene algunas opciones

  1. Conecte todo junto en Application_Start
  2. Asigne la responsabilidad a otro componente que implemente factory pattern y registre los componentes necesarios.

Para el n. ° 2 implementaría algo así como una interfaz IContainer para que su estructura IoC se acople libremente con su sistema. Luego haga que sus implementaciones de acceso a datos utilicen esa interfaz para registrar los componentes requeridos.

+0

OK, entonces en el primer caso (todo en Application_Start) ¿es un problema que la aplicación web ahora tenga una referencia directa al ensamblaje de capa de acceso a datos? –

+0

Si tiene conocimiento de Application_Start acerca de su capa de acceso a datos es un problema, siempre puede abstraer su implementación de IoC detrás de una interfaz y moverla a otro lugar. Entonces, la decisión de qué DAL registrar se puede hacer ajena a su aplicación web. –

+2

A menos que su DAL esté detrás de un servicio web, su aplicación web necesitará acceder a su ensamblado DAL a través del directorio bin o GAC, ¿no? –

Cuestiones relacionadas