依赖注入容器看起来不太对劲。

4

我有一个非常小的应用程序,我正在使用它来学习设计模式。

目前,我正在尝试实现一个依赖注入容器,但它只感觉像是一个工厂。

有人能解释一下容器有什么问题以及可以在哪些方面进行改进吗?

正如我所说,它非常简单,应用程序只需要几个对象:

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个回答

1
一个工厂可以被视为静态类型的依赖注入。您在编译时指定参数,结果对象图始终相同。
依赖注入工具将使用某种反射来在运行时检查需要哪些参数。然后它会在其配置中搜索所需类型并为您构建对象图。
如果要构建一个简单的DI容器,您需要创建支持注册类型和在运行时检查所需类型的支持。
类似于:
myDi.Register(<typeofIObectA>).To(<typeofobjectA>)
myDi.Register(<typeofIObjectB>).To(<typeofobjectB>)

MyDi.Resolve(<typofApplicationRunner>)

DI容器会发现ApplicationRunner需要两个参数。它会检查这些类型的配置,然后构造对象。

那么我的例子是工厂而不是依赖注入容器,对吗? - user1572427
是的,你的是工厂,而不是依赖注入。 - Wouter de Kort

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接