首页 > 解决方案 > 如何在 Symfony 中将服务注入工厂创建的对象

问题描述

我有EmailNotifier在工厂类中创建的自定义类NotifierFactory。我需要在 EmailNotifier 中使用 Mailer 服务。但是如何在里面注入服务呢?它不能被注入到构造函数中,因为我是这样创建类的:

$emailNotifier = new EmailNotifier();

我试图将它注入 services.yaml

App\Service\Notifier\Notifiers\EmailNotifier:
 calls:
    - [setMailer, ['@mailer']]

但是永远不会调用 setMailer() 方法。

标签: symfony

解决方案


如果我选择另一种方法,我可以向我的“通知程序”注入服务

# Defining each notifier as a service, then pass another service inside (mailer here)
notifiers.email:
    public: true
    class: App\Service\Notifier\Notifiers\EmailNotifier
    calls:
        - [setMailer, ['@mailer']]

# Pass each notifier service inside the Notifier object, which replaces the factory class
App\Service\Notifier\Notifier:
    calls:
        - [setNotifierServices, ['@notifiers.email']]

推荐阅读