我有一个服务需要驱动程序来完成实际工作。驱动程序本身在Symfony 2的背景下是另一种服务。将基于参数的服务注入其他服务
为了说明的简化版本:
services:
# The driver services.
my_scope.mailer_driver_smtp:
class: \My\Scope\Service\Driver\SmtpDriver
my_scope.mailer_driver_mock:
class: \My\Scope\Service\Driver\MockDriver
# The actual service.
my_scope.mailer:
class: \My\Scope\Service\Mailer
calls:
- [setDriver, [@my_scope.mailer_driver_smtp]]
正如上述说明,我可以注入任意两个司机服务纳入梅勒服务。问题当然是被注入的驱动程序服务是硬编码的。所以,我想参数化@my_scope.mailer_driver_smtp
。
我通过添加条目到为此我parameters.yml
my_scope_mailer_driver: my_scope.mailer_driver_smtp
然后我可以在config.yml
使用该和参数分配给语义暴露配置[1]:
my_scope:
mailer:
driver: %my_scope_mailer_driver%
在最后,在我的包的Configuration
类中,我在容器上设置了一个参数:
$container->setParameter('my_scope.mailer.driver', $config['mailer']['driver']);
容器参数my_scope.mailer.driver
的值现在等于我在parameters.yml
中设置的my_scope.mailer_driver_smtp
,也就是我对此的理解是正确的,只是一个字符串。
如果我现在使用容器中的参数名称,我收到一个错误,抱怨说没有这样的服务。 E.g:
services:
my_scope.mailer:
class: \My\Scope\Service\Mailer
calls:
- [setDriver, [@my_scope.mailer.driver]]
以上将导致一个错误:
[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]
The service "my_scope.mailer" has a dependency on a non-existent service "my_scope.mailer.driver"
现在的问题是,什么是正确的语法注入此容器参数基于服务?
[1] http://symfony.com/doc/current/cookbook/bundles/extension.html
你需要使用[' $ container-> setAlias'](http://stackoverflow.com/a/19356276/1607098)而不是 – Touki
有趣。你指出我之前问过的问题的接受答案。你认为你可以在回答中添加上面的链接,以便我可以接受它作为正确答案吗?谢谢。 – Luke