簡體   English   中英

在Symfony4中將接口作為參數的Autowire類

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM