YII2框架学习 扩展篇(四) 依赖注入
2017-07-01 21:45
423 查看
看了一些介绍,感觉都说得不够透彻啊。我个人简单举个例子,就是在搜索的时候,把所有可变条件都作为参数输入,这样可以实现代码最大程度的复用,增加代码的扩展性。不过,YII框架这种情况提供了其他相应的方案,先看看容器方式的实现。
说实话,我自己没看很懂,半知半觉,以后花时间好好研究一下,我怎么感觉这都不像php了,可能是因为没有接触过重型框架
容器 定义并解决依赖关系
namespace app\controllers;
use yii\web\Controller;
use yii\di\Container;
class HelloController extends Controller{
public function actionAbout(){
$container = new Container;
$container->set('app\controllers\Driver', 'app\controllers\ManDriver');
$car = $container -> get('app\controllers\Car');
$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){
$this->driver = $driver;
}
public function run(){
$this->driver->drive();
}
}
服务定位器 配置服务的参数信息
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\di\ServiceLocator;
class HelloController extends Controller{
public function actionAbout(){
\yii::$container->set('app\controllers\Driver', 'app\controllers\ManDriver') ;
$sl = new ServiceLocator;
$sl -> set('car',[
'class' => 'app\controllers\Car'
]);//这一段可以加到web.php 然后通过$app->car实现
$car = $sl->get('car');
$car->run();
}
}
interface Driver{
public function drive();
}
class ManDriver implements Driver{
public function drive(){
echo 'i am an old man1!';
}
}
class Car{
private $driver = null;
public function __construct(Driver $driver){
$this->driver = $driver;
}
public function run(){
$this->driver->drive();
}
}
没有碰到实际工程的话,并看不出来这种方法的奇妙。以后碰到问题再补充。
说实话,我自己没看很懂,半知半觉,以后花时间好好研究一下,我怎么感觉这都不像php了,可能是因为没有接触过重型框架
容器 定义并解决依赖关系
namespace app\controllers;
use yii\web\Controller;
use yii\di\Container;
class HelloController extends Controller{
public function actionAbout(){
$container = new Container;
$container->set('app\controllers\Driver', 'app\controllers\ManDriver');
$car = $container -> get('app\controllers\Car');
$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){
$this->driver = $driver;
}
public function run(){
$this->driver->drive();
}
}
服务定位器 配置服务的参数信息
namespace app\controllers;
use Yii;
use yii\web\Controller;
use yii\di\ServiceLocator;
class HelloController extends Controller{
public function actionAbout(){
\yii::$container->set('app\controllers\Driver', 'app\controllers\ManDriver') ;
$sl = new ServiceLocator;
$sl -> set('car',[
'class' => 'app\controllers\Car'
]);//这一段可以加到web.php 然后通过$app->car实现
$car = $sl->get('car');
$car->run();
}
}
interface Driver{
public function drive();
}
class ManDriver implements Driver{
public function drive(){
echo 'i am an old man1!';
}
}
class Car{
private $driver = null;
public function __construct(Driver $driver){
$this->driver = $driver;
}
public function run(){
$this->driver->drive();
}
}
没有碰到实际工程的话,并看不出来这种方法的奇妙。以后碰到问题再补充。
相关文章推荐
- 框架学习之Spring 第二节 采用Spring管理Bean和依赖注入
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入2
- (7)学习笔记 ) ASP.NET CORE微服务 Micro-Service ---- 利用Polly+AOP+依赖注入封装的降级框架
- 框架学习之Spring 第二节 采用Spring管理Bean和依赖注入
- 【框架学习与探究之依赖注入--Autofac】
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 3.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探
- Spring.NET依赖注入框架学习--简介
- 扩展ASP.NET MVC三层框架且使用StructureMap实现依赖注入1-Model层
- YII2框架学习 扩展篇(二) 事件机制
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入2-Repository层的实现
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 3.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探
- 框架学习之Spring 第二节 采用Spring管理Bean和依赖注入
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入1
- Spring.NET依赖注入框架学习-- 泛型对象的创建和使用
- Spring.NET依赖注入框架学习--简单对象注入
- Spring.NET依赖注入框架学习--实例化容器常用方法
- Spring.NET依赖注入框架学习--入门
- 微软企业库5.0 学习之路——扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]
- 扩展ASP.NET MVC三层框架并使用StructureMap实现依赖注入1-Model层的实现
- 扩展ASP.NET MVC三层框架且使用StructureMap实现依赖注入1-Model层