【发布时间】:2012-10-30 12:44:45
【问题描述】:
我目前正在用 PHP 构建一个 MVC 应用程序(不使用任何框架)。我正在使用 yadif (https://github.com/beberlei/yadif) 进行依赖注入。
我想建立一个登录模块。它应该能够使用适配器,例如,可以设置使用 MySql 数据库或某个 LDAP 目录对登录进行身份验证。此设置将在管理区域完成并存储在数据库中。
我想我会有一个抽象适配器:
<?php
abstract AbstractLoginAdapter{
abstract function login($username, $pass){}
}
然后我会像这样实现适配器:
<?php
MySQLLoginAdapter extends AbstractLoginAdapter{
public function login($username, $pass){
//do stuff
}
}
这一切都很好,但是如何创建适配器的实例?通常,依赖项会通过构造函数使用 yadif 注入:
<?php
class loginController{
private $_adapter;
public function __construct(AbstractLoginAdapter $adapter){
$this->_adapter = $adapter;
}
}
但是,由于我不知道将注入哪个具体适配器,因此我无法事先在配置中进行设置。 Yadif 允许我创建一个配置,然后我需要将其传递给容器:
$builder = new Yadif_Builder();
$builder->bind("loginController")
->to("loginController")
->args($SelectedLoginAdapter);
由于应用程序使用前端控制器,因此会在那里创建一个 DI 容器。然后它会创建一个路由对象等。
鉴于此,我是否应该将该容器的引用传递给 loginController 对象,然后使用该容器实例化我的适配器?
或者我应该在我的 loginController 对象中实例化一个新容器,然后只加载适配器的一个实例?
【问题讨论】:
标签: php dependency-injection adapter