#### 操作方法注入
架构函数注入的话,需要给控制器定义相关的属性,而操作方法的注入则不需要给控制器类定义额外的属性,直接调用参数即可,缺点是只能在这个操作方法内部调用。
~~~
<?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 . '!';
}
}
~~~
参数绑定和依赖注入的参数顺序对最终的方法没有影响。