## 容器和依赖注入
5.1正式引入了容器的概念,用来管理类依赖及运行依赖注入。
>[danger] 5.0版本已经支持依赖注入的,依赖注入和容器没有直接关系,只是有时候还不够方便而已
使用`app`助手函数获取容器中的对象实例(支持依赖注入)。
~~~
$app = app();
// 判断对象实例是否存在
isset($app->cache);
// 注册容器对象实例
$app->cache = think\Cache::class;
// 获取容器中的对象实例
$cache = $app->cache;
// 或者使用助手函数
$cache = app('cache');
~~~
5.0自动注入的方式有所区别,绑定操作不再使用`Request`对象而是直接注册到容器`Container`类或者`Facade`类,并且支持模型事件和数据库事件的依赖注入,依赖注入会首先检查容器中是否注册过该对象实例,如果有的话就会自动注入,例如:
我们可以给路由绑定模型对象实例
~~~
Route::get('user/:id','index/Index/hello')
->bindModel('\app\index\model\User');
~~~
然后在操作方法中自动注入User模型
~~~
<?php
namespace app\index\controller;
use app\index\model\User;
use think\Controller;
class Index extends Controller
{
public function hello(User $user)
{
return 'Hello,'.$user->name;
}
}
~~~