## 容器和依賴注入
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;
}
}
~~~