您的位置:首页 > 编程语言 > PHP开发

YII服务定位器依赖注入

2016-05-26 09:40 435 查看
<?php
/**
* Created by PhpStorm.
* Date: 2016/5/25
* Time: 18:33
* 服务定位器依赖注入
*/
namespace frontend\controllers;

use yii;
use yii\web\Controller;
use yii\di\Container;
use yii\di\ServiceLocator;

class DependencyinjectserviceController extends Controller{
public function actionIndex()
{

Yii::$container->set('frontend\controllers\Driver','frontend\controllers\ManDriver');
$sl = new ServiceLocator();
$sl->set('Car',[
'class'=>'frontend\controllers\Car',
]);
$car = $sl->get('Car');
$car->run();

/* 'car' =>['frontend\controllers\Driver','frontend\controllers\ManDriver'];可以配置在config components中
这时
Yii::$app->car->run();*/
/*板块2
* Yii::$container->set('frontend\controllers\Driver','frontend\controllers\ManDriver');
Yii::$app->car->run();
*/

}
}

interface Driver{
public function drive();
}
class ManDriver implements  Driver{
public function drive(){
echo "I am an old man!";
}
}
class Car{
private $driver = null;

public function __construct(Driver $driver)//第20行实现接口传递 ,消除强依赖
{
$this->driver = $driver;
}
public function run()
{
$this->driver->drive();
}
}


config.php

<?php

$config = [
'components' => [//应用组件
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => 'fvfpjzSKyDScNsrOXvd8f8atT6CY0rVj',
],
'car' =>[
'class'=>'frontend\controllers\Car'
],
],

];

if (!YII_ENV_TEST) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}

return $config;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: