php如何注入依赖,如何在PHP中正确地注入依赖项

我有一些依赖注入的问题,我想澄清一下.首先要提到的是我实现的依赖注入容器(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的方式.

有没有第三种方法可以消除两种方法的弱点?

最佳答案 如果您正在寻找“自动接线”,请切换到接口并实现您的具体型号/视图/等.针对该接口的类.这样你可以使用反射来配对两侧.

拥有一种在容器级别显式指定依赖关系的机制也是有意义的.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值