gpt4 book ai didi

oop - 依赖注入(inject)容器看起来不太对劲

转载 作者:行者123 更新时间:2023-12-04 20:16:36 26 4
gpt4 key购买 nike

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

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

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

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

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

}

最佳答案

工厂可以看作是依赖注入(inject)的静态类型。您在编译时指定参数,结果对象图始终相同。

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

如果您想构建一个简单的 DI 容器,您需要创建对注册类型和在运行时检查所需类型的支持。

就像是:

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

MyDi.Resolve(<typofApplicationRunner>)

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

关于oop - 依赖注入(inject)容器看起来不太对劲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12105619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com