[英]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.