提供动态配置的Symfony 3服务配置

时间:2018-04-20 16:03:16

标签: symfony dependency-injection

我想知道如何在以下用例下避免二传手注射。

我有一系列标记服务:

interface EmailFormatter

class CvEmailFormatter implements EmailFormatter
class RegistrationEmailFormatter implements EmailFormatter
class LostPasswordEmailFormatter implements EmailFormatter

我使用CompilerPass通过调用 addEmailFormatter()方法将这些注入到邮件服务中。

每个EmailFormatter实例都需要一些必须在运行时从当前用户检索的配置:

/**
 * @var FormatterConfig[]
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\FormatterConfig", mappedBy="user", cascade={"persist"}, orphanRemoval=true)
 */
protected $formatterConfigs;

现在我正在检查用户是否在邮件服务的 addEmailFormatter()方法中为特定的EmailFormatter创建了配置。如果有,那么 setConfig()会注入配置对象。如果不存在配置,则根本不会添加EmailFormatter。

public function addEmailFormatter(EmailFormatter $formatter, $alias)
{
    $formatterConfig = $this->user->getFormatterConfig($alias);

    if (null !== $formatterConfig) {
        $this->formatters[$alias] = $formatter;
        $formatter->setConfig($formatterConfig);
    }
}

鉴于我正在使用可变的服务集合,这可能是一个合法的用例吗?

0 个答案:

没有答案