我目前正在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