Symfony 2依赖注入:是否可以通过类名获取服务?

3

传统上,您可以这样使用服务容器:

$container->get('my_service');

然而,只要特定类的唯一定义存在,我希望能够通过类名获取此服务:

$container->xxx('My\Application\Service');

使用服务容器可以实现这个吗?

2个回答

4

不可能,因为:

  • 一个类可以出现多次(在许多情况下会出现)[1]
  • 使用DIC的主要原因是将具体实现与使用分离,因此如果您想要一个具体类的实例,则根本不需要使用DIC。

[1] 说这个类只出现一次并不是将边缘情况实现到DIC本身的好论点。


我明白你的意思。我的想法是将其用作自动装配系统的基础,这样我们就可以通过查看类的定义来将依赖项注入到其中。但你是对的,特别是在使用接口时,在问题中提出的方式毫无意义。 - BenMorel

4
自 Symfony 3.3 版本以来就可以实现:
例如,如果您有一个像这样的 UserManager:
services:
# ...
# traditional service definition
app.manager.user:
    class: AppBundle\EventListener\UserManager
    tags:  ['kernel.event_subscriber']

然后你可以通过以下方式获取它:
// before Symfony 3.3
$this->get('app.manager.user')->save($user);

// Symfony 3.3+
$this->get(UserManager::class)->save($user);

source

的翻译是:在HTML中,这表示一个带有名称为“link1”的自定义标记,其中“source”参数是该标记的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接