【发布时间】:2019-05-21 08:18:54
【问题描述】:
我有一个接受多个Consumer 实现作为构造函数参数的类。
我想通过 Symfony DI 容器“填写”我所有的消费者。 我尝试了注入标记的服务。
final class SynchronousMessageDispatcher implements MessageDispatcher
{
/**
* @var Consumer[]
*/
private $consumers;
public function __construct(Consumer ...$consumers)
{
$this->consumers = $consumers;
}
}
所以我尝试像这样在services.yml 中标记服务:
services:
_instanceof:
EventSauce\EventSourcing\Consumer:
tags: ['eventsauce.consumer']
然后像这样注入它:
eventsauce.message_dispatcher:
class: EventSauce\EventSourcing\SynchronousMessageDispatcher
arguments: [!tagged eventsauce.consumer]
现在我收到以下错误:
传递给 EventSauce\EventSourcing\SynchronousMessageDispatcher::__construct() 的参数 1 必须实现接口 EventSauce\EventSourcing\Consumer,给定 Symfony\Component\DependencyInjection\Argument\RewindableGenerator 的实例
我完全理解为什么。有没有办法解压服务
换句话说:是否可以以某种方式修改[!tagged eventsauce.consumer]。还是 ...$consumers 语法与 Symfony 中的标记服务注入不兼容。
不要误会我的意思。我知道我自己可以轻松实现MessageDispatcher。只是想知道;-)
【问题讨论】:
-
您必须重写自定义
!tagged功能,请参阅此行:github.com/symfony/symfony/pull/22200/…
标签: symfony dependency-injection