如何在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的服务容器来实现这一目标?
提前致谢。
答案 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;
}