如何在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;
}
标签:laravel,dependency-injection,php
来源: https://codeday.me/bug/20191112/2023529.html