[英]Autowire Class with Interface as param in Symfony4
给定这样的班级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文档进行自动装配 ,它们看起来是一样的吗?
谢谢!
我相信Symfony Messenger组件已经声明了MessageBusInterface
服务。 尝试从services.yaml
删除Symfony\\Component\\Messenger\\MessageBusInterface: ~
,否则您将覆盖默认定义。
需要澄清的注释: MessageBusInterface
服务实际上并不存在,它是“默认总线”服务的别名。 您可以声明其他总线,请参阅文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.