2011-11-22 15 views
8

que tienen una aplicación C# configurar este modo:¿En qué ensamblaje debe residir un módulo Autofac personalizado?

[Assembly-ConsoleApp] --References--> [Assembly-Domain] 
              /
[Assembly-FileAccess] --References-->---------/ 

Básicamente, la mayoría de mis interfaces y algunas clases concretas se encuentran en el conjunto de dominios, con muchas de las implementaciones concretas que se encuentran en el conjunto FileAccess. El ensamblaje ConsoleApp utiliza el ensamblado Dominio sin referencias al ensamblado FileAccess.

He creado un módulo autofac FileAccess para conectar las implementaciones de FileAccess con las interfaces de dominio, junto con las clases concretas directamente dentro del ensamblado de dominio. Mi pregunta es dónde poner este módulo. Desde una perspectiva de mejores prácticas, si el módulo está en el ensamblado FileAccess (que me obligaría a agregar una referencia/dependencia en los ensamblajes autofac) o debería ir en el ensamblaje de ConsoleApp (que hace uso del módulo y ya tiene una dependencia autofac)? ¿O tendría sentido una asamblea totalmente separada que simplemente tenga el módulo dado?

Gracias

Respuesta

8

Un contenedor sólo se debe hacer referencia a la aplicación de Composition Root, que en su caso significa el conjunto ConsoleApp.

Esto asegura que los ensamblajes que contienen la lógica de la aplicación se mantienen libres de cualquier dependencia en un contenedor DI particular.

Usted podría también implementar el módulo en un ensamblado independiente y la carga que a partir de la raíz Composición, pero desde que el montaje (la ConsoleApp) todavía necesita una referencia a Autofac, no se gana mucho de hacer eso. Depende un poco del escenario en cuestión, pero a menos que esté creando una aplicación de ISV que se envía como una pieza de software (virtualmente) empaquetada para muchos clientes no controlados, rara vez vale la pena el esfuerzo.

+0

Gracias Mark! Eso es lo que pensé que era el camino a seguir, pero solo quería estar seguro. Todavía soy muy nuevo en el uso de contenedores (y el uso de ** ** ** inyección de dependencia para el caso). –

Cuestiones relacionadas