Symfony 3服务配置提供动态配置
我想知道在以下用例下如何避免setter注入 我有一系列带标签的服务:Symfony 3服务配置提供动态配置,symfony,dependency-injection,Symfony,Dependency Injection,我想知道在以下用例下如何避免setter注入 我有一系列带标签的服务: interface EmailFormatter class CvEmailFormatter implements EmailFormatter class RegistrationEmailFormatter implements EmailFormatter class LostPasswordEmailFormatter implements EmailFormatter 我使用CompilerPass通过调用其
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;
现在,我正在检查用户是否在mailer服务的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);
}
}
鉴于我正在处理一个可变的服务集合,这是否是一个合法的用例?问题是什么?您试图避免的错误或情况是什么?为什么不使用当前的设置?我的问题是关于一个相当广泛的建议,即setter注入是一种不好的做法。