Я сомневался, но, видимо, вы правы, и вы можете использовать интерфейс несколько раз, но нужно проделать некоторую работу , по сути, компонент мессенджера будет делать такие вещи, я думаю (Я не проверял подробно - обновление: я пытался найти это, но пока безуспешно ...).
Вот почему я предполагаю, что конструктор DI работает. ServiceSubscriberInterface :: getSubscribeedServices () используется аналогичным образом : в частности, ключ этого массива предполагается как псевдоним или имя класса или имя интерфейса или .. но, очевидно, это не дает вам хороший способ индексировать ваш массив сервисов, потому что он имеет значение.
Итак, я бы предположил, что простое удаление ключей вашего массива вполне может сделатьработа. В качестве альтернативы вы можете использовать фактическое имя службы MessageBusInterface
s, запустив bin/console debug:container MessageBusInterface
, который, как мы надеемся, вернет список псевдонимов служб, предоставляющих этот интерфейс ... или, возможно, вам придется просмотреть полный список ...
( update : как Снек правильно указал в чате, значение должно быть FQCN, что приводит к моему предположению, что ключ должен быть interface + varname, а значения - только интерфейс)
Для дальнейшего использования ServiceSubscriberInterface
вам все еще нужно получить указатель службы в вашем классе (как подсказано в комментарии ), чтобы затем иметь возможность обслуживать службы. Тем не менее, мне интересно, если бы компонент мессенджера не предоставил подобный метод получения определенной шины по имени ...