2017-06-30 1 views
0

Je commence un nouveau projet en utilisant Symfony 3.3. Je voudrais utiliser les nouvelles fonctionnalités autoconfigure/autowiring, mais je suis en train de rencontrer un problème, je ne sais pas comment résoudre.Les services Symfony autowire échouent parce que deux services sont basés sur la même classe

J'ai la définition des services suivants provenant d'un faisceau externe:

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

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

Les deux services sont basés sur la même classe « MessageBusSupportingMiddleware », mais leur intention est tout à fait différent bien sûr. Maintenant, je veux que Symfony 3.3 injecte automatiquement le service "command_bus" dans mon contrôleur. Mais pour cela, je dois utiliser la classe dans le constructeur comme ceci:

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

Dans ce cas cependant, Symfony se plaint parce qu'elle trouve effectivement plusieurs définition de service lié à cette classe et il ne peut donc pas savoir lequel fournir.

Comment pensez-vous que je pourrais gérer cette situation?

Répondre

0

Je trouve réellement un moyen de surmonter cette situation.

J'ai créer deux classes dans mon propre projet:

class CommandBus extends MessageBusSupportingMiddleware 
{ 
} 

class EventBus extends MessageBusSupportingMiddleware 
{ 
} 

Leur seul but est d'être en mesure de passer outre la définition de service par défaut du faisceau externe et utiliser la mise en œuvre différentes pour pouvoir les lier automatiquement. Ma configuration de remplacement de service est simplement effectuée dans un fichier services.yml en tant que tel:

services: 

    command_bus: 
     class: CoreBundle\Bus\CommandBus 

    event_bus: 
     class: CoreBundle\Bus\EventBus