传统上,您会以这种方式使用服务容器:
$container->get('my_service');
但是,如果只存在一个特定类的定义,我想按类名获取此服务:
$container->xxx('My\Application\Service');
服务容器可以做到这一点吗?
传统上,您会以这种方式使用服务容器:
$container->get('my_service');
但是,如果只存在一个特定类的定义,我想按类名获取此服务:
$container->xxx('My\Application\Service');
服务容器可以做到这一点吗?
不,这是不可能的,因为:
[1] 说这一类只出现一次并不是在 DIC 本身中实现边缘情况的好论据。
从 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);