如何在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 举报,一经查实,本站将立刻删除。