TP6.0 容器和依賴注入

作者:辰風沐陽 閱讀:1964 發(fā)布時間:2021-04-10 上次更新:2021-04-10

1. 什么是依賴注入


依賴注入本質上是指類的依賴通過構造器完成自動注入。

例如:在控制器構造方法或普通方法中一旦對參數(shù)進行對象類型約束則會自動觸發(fā)依賴注入,由于訪問控制器的參數(shù)都來自于URL請求,普通變量就是通過參數(shù)綁定自動獲取,對象變量則是通過依賴注入生成

依賴注入:即允許通過類的方法傳遞對象的能力,并且限制了對象的類型(約束),而傳遞對象的背后那個類被自動綁定并且實例化了,這就是依賴注入

2. 容器


依賴注入的類統(tǒng)一由容器管理的,大多數(shù)情況下是自動綁定和自動實例化的

如果想手動來完成綁定和實例化,可以使用 bind() 和 app() 助手函數(shù)實現(xiàn)

3. 使用示例


  1. // 綁定類庫標識,這個標識具有唯一性,以便快速調用
  2. bind('one', \app\model\User::class);
  3. // 快速調用并且自動實例化對象,類庫標識嚴格區(qū)分大小寫
  4. app('one');
  5. // 第二參數(shù)用于傳參,
  6. // 自動實例化對象的方式默認使用單例模式,第三參數(shù)為true時調用會重新實例化
  7. app('one', [], true);
  8. // 也可以直接綁定一個類到容器中并自動實例化
  9. app(\app\model\User::class);
  10. // 使用 bind([]) 可以批量綁定
  11. // 不同系統(tǒng)有專門提供批量綁定的文件 app/provider.php
  12. bind([
  13. 'user' => \app\model\User::class,
  14. 'admin' => \app\model\Admin::class,
  15. ]);

4. 容器 Provider 定義文件


框架文件 app/provider.php 用于定義容器類, 將類綁定到容器中

自己封裝的一些類文件可以通過該文件將類綁定到容器中, 以便快速調用

  1. <?php
  2. use app\ExceptionHandle;
  3. use app\Request;
  4. // 容器Provider定義文件
  5. return [
  6. 'think\Request' => Request::class,
  7. 'think\exception\Handle' => ExceptionHandle::class,
  8. // 擴展類庫
  9. 'math' => Math::class,
  10. 'layui' => Layui::class,
  11. ];

快速調用

  1. app('layui')->table('用戶列表', 10, $data);

標簽: TP6.0