Estoy un poco confundido con el patrón de inyección de Constructor y la regla Don’t call the container; it’ll call you.Inyección de constructor: ¿a dónde llamar?
¿Alguien puede explicarme (y tal vez alguien más) cómo la aplicación real debería derivar todas las ventajas de DI usando Constructor Injection? Doy para que algunos simple y creo ejemplo común:
DomainObject
RepositoryObject
DaoObject
Las relaciones es obvia (creo) - RepositoryObject necesita DaoObject, DomainObject necesita Repositorio.
Uso de la inyección de Constructor Supongo que puedo olvidarme (en la mayoría de los casos) de la palabra clave NEW, pero cuándo, dónde y cómo debería crear nuevos objetos (principalmente dominio)? Debo escribir fábricas para todas las clases? ¿Debo referirme a DI Container en esa fábrica?
Lo mejor será cuando alguien me muestre algún ejemplo de aplicación real (por favor, no Asp.Net MVC :)) o bosqueje alguna estructura de proyecto.
Ver esta respuesta: http://stackoverflow.com/questions/6277771/what-is-a-composition-root-in-the-context-of-dependency-injection/6277806#6277806 –
@Mark - Ok, Creo que entiendo eso, pero tengo algunos problemas con la creación del objeto de dominio. Supongamos que he creado el objeto controlador (Global.asax como raíz de la aplicación) y ahora tengo alguna acción (publicación), y tengo que crear en este momento, digamos - Libro nuevo, y el Libro necesita alguna dependencia de c (Repositorio o alguna cosa) . Entonces, ¿cómo crear ese nuevo objeto? ¿DEBO SIEMPRE proporcionar esa dependencia al objeto Controlador, aunque algunos de ellos se usan ÚNICAMENTE para crear mi objeto "Libro"? La misma situación es con los Repositorios (algunos de sus métodos crean nuevos objetos de dominio). – mgibas
http://stackoverflow.com/questions/4835046/why-not-use-an-ioc-container-to-resolve-dependencies-for-entities-business-object/4836790#4836790 –