Класс Autowire с интерфейсом в качестве параметра в Symfony4 - PullRequest
0 голосов
/ 18 марта 2019

Учитывая класс Publisher, как это:

<?php

namespace App\Util\Publisher;


use Symfony\Component\Mercure\Update;
use Symfony\Component\Messenger\MessageBusInterface;

class Publisher
{

    protected $topic = null;
    protected $bus;

    /**
     * Publisher constructor.
     * @param MessageBusInterface $bus
     */
    public function __construct(MessageBusInterface $bus)
    {
        $this->topic = getenv('TOPIC_MAIN_URL');
        $this->bus = $bus;
    }

    ...

}

Я бы хотел подключить его в контроллерах следующим образом:

/**
 * @Route("/_exp/_exp", name="exp")
 */
public function expAction(Publisher $publisher)
{
    ...
}

и я добавил это к своему services.yaml:

Symfony\Component\Messenger\MessageBusInterface: ~

App\Util\Publisher\Publisher:
    autowire: true
    arguments: ['@Symfony\Component\Messenger\MessageBusInterface']

Но я получаю ошибку:

Невозможно создать экземпляр интерфейса Symfony \ Component \ Messenger \ MessageBusInterface

Это связано с MessageBusInterface или я делаю что-то не так с автопроводкой. Я следовал за Документами Symfony для автоматической проводки , и они, кажется, одинаковы?

Спасибо!

1 Ответ

0 голосов
/ 18 марта 2019

Я считаю, что MessageBusInterface сервис уже объявлен компонентом Symfony Messenger. Попробуйте удалить Symfony\Component\Messenger\MessageBusInterface: ~ из вашего services.yaml, в противном случае вы переопределяете определение по умолчанию.

Примечание для уточнения: MessageBusInterface сервис на самом деле не существует, он в псевдониме над сервисом "шина по умолчанию". Вы можете объявить другие автобусы, cf документация

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...