Symfony autowire服务失败,因为两个服务基于同一个类

时间:2017-06-30 18:31:14

标签: dependency-injection symfony-3.3

我正在使用Symfony 3.3开始一个新项目。我想使用新的自动配置/自动装配功能,但我遇到了“问题”我不知道如何解决。

我有来自外部捆绑包的以下服务定义:

command_bus:
    class: Name\Space\To\MessageBusSupportingMiddleware
    ...

event_bus:
    class: Name\Space\To\MessageBusSupportingMiddleware
    ...

这两种服务都基于相同的“MessageBusSupportingMiddleware”类,但它们的用意当然完全不同。

现在我希望Symfony 3.3自动将“command_bus”服务注入我的控制器。但为此,我必须在构造函数中使用类,如下所示:

public function __construct(
    MessageBusSupportingMiddleware $commandBus
){
    $this->commandBus = $commandBus;
}

在这种情况下,Symfony抱怨,因为它实际上找到了与此类相关的几个服务定义,因此无法知道要提供哪一个。

您认为我怎么能处理这种情况?

1 个答案:

答案 0 :(得分:0)

我实际上找到了克服这种情况的方法。

我在自己的项目中创建了两个类:

class CommandBus  extends MessageBusSupportingMiddleware
{
}

class EventBus  extends MessageBusSupportingMiddleware
{
}

它们唯一的目的是能够覆盖外部包中的默认服务定义,并使用不同的实现来自动装配它们。我的服务覆盖配置只需在services.yml文件中完成,如下:

services:

    command_bus:
        class: CoreBundle\Bus\CommandBus

    event_bus:
        class: CoreBundle\Bus\EventBus