【发布时间】:2013-04-24 16:25:37
【问题描述】:
我遇到了一些依赖注入问题,我想澄清一下。首先要提的是我实现的一个依赖注入容器(DIC),它能够通过构造函数使用ReflectionClass注册和解析依赖。
$container = new DiC;
$container->register('session', 'CSession');
$container->register('response', 'CResponse');
$container->register('model', 'CSomeModel');
$container->register('view', 'CSomeView');
$container->register('controller', 'CSomeController');
从属控制器:
class CSomeController extends CController
{
public function __construct(CSomeModel $model, CSomeView $view)
{
// assign arguments here
}
}
现在可以通过DIC实例化控制器了:
$controller = $container->resolve('controller');
我喜欢这种方法,因为它是自动化的和描述性的,但是类 CController 依赖于特定的类 CSomeModel、CSomeView,这很糟糕。 MVC 三元组应该独立实例化 - 例如,我不能将 COtherView 传递给 CSomeController。
我的第二个猜测是注入 DIC:
class CSomeController extends CController
{
public function __construct(DiC $dic)
{
// resolve dependencies through $dic
}
}
这使得 DiC 对象全局化,很多人认为这不是实现 DI 的方式。
是否有第三种方法可以消除这两种方法的弱点?
【问题讨论】:
-
您介意发布您的
DiC课程吗? -
Symfony2 使用基于 Java Spring 的非常可靠的 DI 组件...这与您所做的类似...更进一步...symfony.com/doc/2.0/components/dependency_injection/…
标签: php design-patterns dependency-injection