【发布时间】:2014-05-10 16:16:43
【问题描述】:
我一直在问,如果在控制器中创建模型层的实例是错误的,即使它隐藏在这样的工厂后面:
parent::getServiceFactory()->create('Car');
我被告知使用依赖注入容器来初始化我的控制器。我整晚都在谷歌上搜索,昨晚,我了解到依赖注入容器(DiC)用于创建对象的实例,并将所需的对象注入其中,而不是在路由器中手动执行 - 也许我只是误解了概念。
我已阅读此帖子How to build a PHP Dependency Injection Container,它显示了以下代码行:
$ioc->register('database', new DatabaseServiceProvider($host, $user, $pass))
现在,我假设$host, $user, $pass 只是字符串变量,现在如果我想将对象传递给控制器,我如何动态知道它需要注入哪些对象?
这样添加类型数组对吗?:
$container->register('SomeController', array('Namespace\to\Model1', 'Namespace\to\Model2'));
然后那个容器寄存器会创建一个SomeController的对象,里面会有Model1,Model2对象
这样做有错吗?在这种情况下使用DI 的正确方法是什么?域对象和数据映射器也是模型层的一部分吗?
或者当应用程序加载时初始化容器中的所有控制器对象是否正确,然后我可以轻松使用任何控制器?
【问题讨论】:
-
在尝试实际使用它之前,您可能应该先了解什么是 DI 容器以及为什么要使用它。
标签: php oop design-patterns service containers