我目前正在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);
,二容器中创建那里。然后创建一个路由对象等
鉴于此,我要传递的容器里给的LoginController对象的引用,然后使用该容器来实例化我的适配器?
或者我应该在我的loginController对象中实例化一个新的容器,然后在适配器的实例中加载?
谢谢:)我创建了一个类似ContainerAware的抽象类,其他类可以扩展。容器本身会在运行时自动注入该类。这看起来很整洁。 – F21