Contenedor de inyección de dependencia No se ve muy bien
Frecuentes
Visto 40 veces
4
Tengo una aplicación muy pequeña que estoy usando para aprender patrones de diseño.
Actualmente estoy tratando de implementar un contenedor de inyección de dependencia, pero se siente como una fábrica.
¿Alguien puede explicar qué está mal con el contenedor y dónde se puede mejorar?
Como dije, es muy mínimo y la aplicación solo requiere un par de objetos:
class MyContainer
{
public function getObjectA()
{
return new MyObjectA();
}
public function getObjectB()
{
$objectBArrayParam = array('arrparam1','arrparam2', 'arrparam3', 'arrparam4');
$objectB = new MyObjectB('param1','param2', 'param3', 'param4', $objectBArrayParam);
return $objectB;
}
public function getApplicationRunner()
{
$objectA = $this->getObjectA();
$objectB = $this->getObjectB();
$app = new ApplicationRunner($obejctA, $objectB);
return $app;
}
}
1 Respuestas
1
Una fábrica podría verse como un tipo estático de inyección de dependencia. Está especificando los argumentos en tiempo de compilación y el gráfico de objeto resultante es siempre el mismo.
Una herramienta de inyección de dependencia usaría algún tipo de reflexión para verificar en tiempo de ejecución qué argumentos se necesitan. Luego, buscará los tipos requeridos en su configuración y construirá el gráfico de objetos para usted.
Si desea crear un contenedor DI simple, debe crear soporte para registrar tipos y verificar los tipos requeridos en tiempo de ejecución.
Algo como:
myDi.Register(<typeofIObectA>).To(<typeofobjectA>)
myDi.Register(<typeofIObjectB>).To(<typeofobjectB>)
MyDi.Resolve(<typofApplicationRunner>)
El contenedor DI vería que ApplicationRunner necesita dos argumentos. Verificaría la configuración para esos tipos y luego construiría los objetos.
Respondido 24 ago 12, 09:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas oop design-patterns dependency-injection or haz tu propia pregunta.
Entonces, ¿mi ejemplo es fábrica y no contenedor de inyección de dependencia entonces? - user1572427
Sí lo tuyo es una fábrica, no DI - Wouter de Kort