php - 在 Symfony4 中使用接口作为参数的 Autowire 类
问题描述
给定这样的类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 文档进行自动装配,它们似乎是一样的?
谢谢!
解决方案
我相信MessageBusInterface
Symfony Messenger 组件已经声明了服务。尝试Symfony\Component\Messenger\MessageBusInterface: ~
从您的中删除services.yaml
,否则您将覆盖默认定义。
澄清说明:MessageBusInterface
服务实际上并不存在,它是“默认总线”服务的别名。您可以声明其他总线,参见文档
推荐阅读
- ruby-on-rails-4 - Ruby on Rails 如何从视图中打印连接表?
- php - 参数太多,预期参数“命令”“sql”
- java - 如何从 IProject 中获取 Bundle-SymbolicName?
- c# - 我无法使用 c# 在 winium 中选择颜色选择器
- tensorflow - Valgrind 显示 TF_Session 泄漏
- docker - 如何通过docker管理连接拒绝错误elasticsearc-kibana-nginx?
- javascript - Angular 10 - 拖动时不触发(单击)功能
- tensorflow - cuda安装的tensoflow正在使用哪个安装版本?
- c - 如何使用指针访问和使用函数中的不同值?
- c# - 将 Admob 广告集成到 Unity3D 游戏中