Contenedor de inyección de dependencia No se ve muy bien

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;
    }

}

preguntado el 24 de agosto de 12 a las 09:08

1 Respuestas

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

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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.