繁体   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