微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-Laravel setter注入

如何在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的服务容器来实现这一目标?

提前致谢.

解决方法:

您无法确保在运行sendEmail之前已运行其他方法,并且可能具有“方法注入”的唯一方法是setMailer.

如果要为setMailer方法注入方法,则必须使用IoC容器来调用方法

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

在这种情况下,这将为$a提供容器调用setMailer,并将解决所需的任何依赖关系.

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。