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

时间:2012-07-13 11:02:04

标签: php symfony dependency-injection

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

$container->get('my_service');

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

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

这可以通过service container吗?

2 个答案:

答案 0 :(得分:3)

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

  • 一个班级可以(并且在许多情况下)会出现不止一次[1]
  • 使用DIC的主要原因是解耦具体实现 从它的用法来看,如果你愿意,你根本不需要DIC 具体类的实例。

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

答案 1 :(得分: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);

source