2

传统上,您会以这种方式使用服务容器:

$container->get('my_service');

但是,如果只存在一个特定类的定义,我想按类名获取此服务:

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

服务容器可以做到这一点吗?

4

2 回答 2

4

不,这是不可能的,因为:

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

[1] 说这一类只出现一次并不是在 DIC 本身中实现边缘情况的好论据。

于 2012-07-13T11:20:25.750 回答
1

从 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);

资源

于 2020-02-10T23:19:05.553 回答