我有一个非常小的应用程序,我用来学习设计模式。
目前我正在尝试实施一个可靠的注射容器,但它感觉就像一个工厂。
有人可以解释容器的问题以及可以改进的地方。
正如我所说,它非常小,应用程序只需要几个对象:
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;
}
}
答案 0 :(得分:1)
可以将工厂视为静态类型的依赖注入。您在编译时指定参数,结果对象图始终相同。
依赖注入工具将使用某种反射来在运行时检查需要哪些参数。然后,它将在其配置中搜索所需的类型,并为您构建对象图。
如果要构建一个简单的DI容器,则需要为注册类型和在运行时检查所需类型创建支持。
类似的东西:
myDi.Register(<typeofIObectA>).To(<typeofobjectA>)
myDi.Register(<typeofIObjectB>).To(<typeofobjectB>)
MyDi.Resolve(<typofApplicationRunner>)
DI容器会看到ApplicationRunner需要两个参数。它将检查这些类型的配置并构造对象。