2017-06-30 34 views
0

我開始使用Symfony 3.3的一個新項目。我想使用新的autoconfigure/autowiring功能,但我遇到了一個「問題」,我不知道如何解決。Symfony autowire服務失敗,因爲兩個服務基於相同的類

我有以下服務定義從外部束來:

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的抱怨,因爲它實際上找到與此相關的類別中的幾種服務定義,所以它無法知道哪一個提供。

您如何看待我可以處理這種情況?

回答

0

我實際上找到了一種方法來克服這種情況。

我有我自己的項目創建兩個類:

class CommandBus extends MessageBusSupportingMiddleware 
{ 
} 

class EventBus extends MessageBusSupportingMiddleware 
{ 
} 

他們唯一的目的就是爲了能夠從外部束覆蓋默認的服務定義和使用不同的實現,能夠自動裝配它們。我的服務覆蓋配置簡單地在services.yml文件中完成,例如:

services: 

    command_bus: 
     class: CoreBundle\Bus\CommandBus 

    event_bus: 
     class: CoreBundle\Bus\EventBus 
相關問題