YII服务定位器依赖注入

<?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;
时间: 2024-10-07 01:23:15

YII服务定位器依赖注入的相关文章

YII框架的依赖注入容器

依赖注入(Dependency Injection,DI)容器就是一个对象,它知道怎样初始化并配置对象及其依赖的所有对象. 所谓的依赖就是,一个对象,要使用另外一个对象才能完成某些功能.那么这个对象就依赖于被使用的对象. 例如: /** * 厨师 */ class cook { /** * 制作食物 */ public function cooking() { $food = new food(); echo $food->get(),"汤<br/>"; } } /*

Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

Lind.DDD.IoC(大叔推荐)~在服务定位器中引入IoC容器~容器的适配器

回到目录 关于依赖倒置(DIP) 高层模块不依赖于低层模块的实现,而低层模块依赖于高层模块定义的接口,通俗的讲,就是高层模块定义接口,低层模块负责实现,这在我们实际开发中经常被用到,层与层之间引用,经常被添加一个接口层去隔离,在接口层定义相关业务规范,而底层去实现它,高层只引用这个接口,当高级需要其它扩展,直接添加新的接口,由新的底层模块去实现即可,底层其它代码不需要修改,这也完全复合开闭原则(OCP). 关于控制反转(IOC) 控制反转是一种设计模式,像单例,工厂,适合器都属于设计模式的一种,

编码最佳实践——依赖注入原则

我们在这个系列的前四篇文章中分别介绍了SOLID原则中的前四个原则,今天来介绍最后一个原则--依赖注入原则.依赖注入(DI)是一个很简单的概念,实现起来也很简单.但是简单却掩盖不了它的重要性,如果没有依赖注入,前面的介绍的SOLID技术原则都不可能实际应用. 控制反转(IoC) 人们在谈论依赖注入的时候,经常也会谈到另一个概念--控制反转(IoC).按照大内老A的解释:"IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架中以实现对流程的复用,并按照"好莱坞法则

php 依赖注入容器

原文: http://blog.csdn.net/realghost/article/details/35212285 https://my.oschina.net/cxz001/blog/533166 http://www.oschina.net/code/snippet_1171845_48046 http://blog.csdn.net/wzllai/article/details/24485245 看Laravel的IoC容器文档只是介绍实例,但是没有说原理,之前用MVC框架都没有在意这

angular2的依赖注入

更好阅读体验,请看原文 在读这篇文章之前,你要先了解一下什么是依赖注入,网上关于这个的解释很多,大家可以自行Google. 我们这一篇文章还是以QuickStart项目为基础,从头开始讲解怎么在Angular2中使用依赖注入,如果你按照本篇文章中讲解的示例亲自走一遍的话,你一定能够掌握如何在Angular2中使用依赖注入.好,废话不多说,开始我们今天的旅行吧! 我们首先将项目中的内联模板替换为一个模板文件,使用templateUrl替换template: @Component({ selecto

理解 PHP 依赖注入 | Laravel IoC容器

Laravel框架的依赖注入确实很强大,并且通过容器实现依赖注入可以有选择性的加载需要的服务,提高初始化框架的开销,下面是我在网上看到的一个帖子,写的很好拿来与大家分享,文章从开始按照传统的类设计数据库连接一直到通过容器加载服务这个高度解耦的设计展示了依赖注入的强大之处,值得我们借鉴和学习. -----------------------------------------------------------分割线下面是大牛的原文---------------------------------

PHP关于依赖注入(控制反转)的解释和例子说明

PHP关于依赖注入(控制反转)的解释和例子说明 发表于2年前(2014-03-20 10:12)   阅读(726) | 评论(1) 8人收藏此文章, 我要收藏 赞2 阿里云双11绽放在即 1111 元红包即刻开抢!»   摘要 自从听到依赖注入这个设计模式,感觉很高大上,无奈楼主的眼光一直局限在国内框架上,也很少去关注设计模式方面的文章,直到某天遇到了laravel后,发现它手册里重点强调了一个名为“依赖注入”和“容器”的概念,但是对于这两个概念,手册里并未做基本的解释,所以楼主只能另外查找相

.net core学习笔记(三)-依赖注入

.net core 中使用了大量的依赖注入,对依赖注入一直是一知半解,总想不透,项目中用的是一个网上的开源框架,从底层到web层都是用的构造函数依赖注入. 然后了在继承ActionFilterAttribute的过滤器中,重写的OnActionExecuted需要用到依赖注入的服务,然后就想在子类中的构造函数中进行依赖注入,但是发现OnActionExecuted执行前根本不会进入到子类的构造函数中,查了下资料,发现时因为OnActionExecuted会在其父类的构造函数执行时触发,突然就懵了