我在使用依賴注入時出現了一些問題,我想澄清一下。首先要提到的是我實現的依賴注入容器(DIC),它能夠使用ReflectionClass通過構造函數註冊和解決依賴關係。如何在PHP中正確注入依賴關係
$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'類嗎? – 2013-04-29 04:15:48
您應該看看[Laravel4](http://four.laravel.com/docs/ioc)如何處理該問題,特別是「綁定到實施的接口」會話。你可以在[Github]找到相關的源代碼(https://github.com/laravel/framework/blob/master/src/Illuminate/Container/Container.php) – vFragosop 2013-05-01 03:57:28
Symfony2使用一個非常堅固的基於Java的DI組件Spring ...這與你正在做的類似..進一步.. http://symfony.com/doc/2.0/components/dependency_injection/introduction.html – Dinesh 2013-05-03 05:36:33