oop – 依赖注入ContainerDoesnt看起来很正确

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

目前我正在尝试实施一个可靠的注射容器,但它感觉就像一个工厂.

有人可以解释容器的问题以及可以改进的地方.

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

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

}

解决方法

工厂可以被视为静态类型的依赖注入.您在编译时指定参数,结果对象图始终相同.

依赖注入工具将使用某种反射来在运行时检查需要哪些参数.然后它将在其配置中搜索所需的类型并为您构建对象图.

如果要构建一个简单的DI容器,则需要创建对注册类型的支持以及在运行时检查所需类型.

就像是:

myDi.Register(<typeofIObectA>).To(<typeofobjectA>)
myDi.Register(<typeofIObjectB>).To(<typeofobjectB>)

MyDi.Resolve(<typofApplicationRunner>)

DI容器会看到ApplicationRunner需要两个参数.它将检查这些类型的配置并构造对象.

相关文章

什么是设计模式一套被反复使用、多数人知晓的、经过分类编目...
单一职责原则定义(Single Responsibility Principle,SRP)...
动态代理和CGLib代理分不清吗,看看这篇文章,写的非常好,强...
适配器模式将一个类的接口转换成客户期望的另一个接口,使得...
策略模式定义了一系列算法族,并封装在类中,它们之间可以互...
设计模式讲的是如何编写可扩展、可维护、可读的高质量代码,...