Laravel二传手注射

时间:2016-12-13 23:08:16

标签: php laravel dependency-injection

如何在Laravel的服务容器中使用setter依赖注入来自动解决依赖关系?

以下是一个例子:

class Test
{
    (...)

    public function setMailer(Mailer $mailer) 
    {
        $this->mailer = $mailer;
    }

    (...)

    function sendEmail()
    {
        $this->mailer->send(new Email('john.doe@example.com'));
    }
}

如何确保在调用sendEmail()时,邮件依赖性是否已得到满足?我如何利用Laravel的服务容器来实现这一目标?

提前致谢。

1 个答案:

答案 0 :(得分:3)

sendEmail运行之前,您无法确保运行其他方法,并且唯一可以使用'方法注入'的方法是setMailer

如果您想要setMailer方法的方法注入,则必须使用IoC容器来调用该方法:

$a = new Test;
app()->call([$a, 'setMailer']);

这将为setMailer上的容器调用$a,并在此情况下解析所需的所有依赖项。

容器调用sendEmail与自己调用它完全相同,因为没有参数。

如果您真的希望邮件程序可用,则可以使用构造函数注入,以便在调用sendEmail之前使用邮件程序。

public function __construct(Mailer $mailer)
{
    $this->mailer = $mailer;
}