#### 操作方法注入
架構函數注入的話,需要給控制器定義相關的屬性,而操作方法的注入則不需要給控制器類定義額外的屬性,直接調用參數即可,缺點是只能在這個操作方法內部調用。
~~~
<?php
namespace app\index\controller;
use think\Email;
use think\Request;
class Index
{
public function hello(Request $request, Email $email)
{
// 發送Hello郵件
// $email->sendMail($request->param('address'),'Hello');
return 'Hello,' . $request->param('name') . '!';
}
}
~~~
操作方法注入的效果就是使用`$request`參數替代之前的`Request::instance()`方法調用請求對象實例,用`$email`參數替代`new Email()`,代碼更加簡潔,并且很好的解決了代碼的耦合問題。
操作方法的依賴注入原理和架構函數是一樣的,對象的自動實例化規則也是相同,這一點就不再重復。
依賴注入不僅僅是控制器類,如果你的路由規則是路由到其它類或者控制器的方法,一樣可以支持架構函數和方法的依賴注入。
依賴注入和參數綁定是可以共存的,不會相互影響,區別在于依賴注入是不需要通過URL傳參的,而參數綁定是依賴URL傳參,下面是一個同時使用依賴注入和參數綁定的例子:
~~~
<?php
namespace app\index\controller;
use think\Email;
use think\Request;
class Index
{
public function hello(Request $request, Email $email, $name = '', $address = '')
{
// 發送Hello郵件
// $email->sendMail($address,'Hello');
return 'Hello,' . $name . '!';
}
}
~~~
參數綁定和依賴注入的參數順序對最終的方法沒有影響。