我正在尝试使用 .Net7 在 EasyNetQ/RabbitMQ 中设置 Auto Aubsciber
这是我在创业课程中的内容:
var bus = RabbitHutch.CreateBus(ConnectionString);
builder.Services.AddSingleton(bus);
var subscriber = new AutoSubscriber(bus, "Test");
builder.Services.Subscribe(Assembly.GetExecutingAssembly().GetTypes());
我有一个简单的类来发布消息:
public class Test
{
private readonly IBus _bus;
public RabbitPublisher( IBus bus)
{
_bus = bus;
}
public async Task PublishAsync<T>(T messageContent)
{
await _bus.PubSub.PublishAsync(messageContent);
}
}
以及简单的消费类:
public class MessageConsumer : IConsumeAsync<Message>
{
public MessageConsumer(ILogger logger)
{
...
}
public async Task ConsumeAsync(Message message, CancellationToken cancellationToken = default)
{
//Do work
}
}
如果我对此进行测试并发布消息,我会收到以下错误:
无法动态创建“MessageConsumer”类型的实例。原因:没有定义无参构造函数。
现在,如果我创建一个无参数构造函数是可行的,但我需要将服务注入到此类中。我怎样才能实现这个目标?
我正在使用 .net 7 和 EasynetQ 版本 7.5。
谢谢
这是您由于 AutoSubscriber 配置与 MS DI 配合使用而错过的内容
var subscriber = new AutoSubscriber(app.Services.GetRequiredService<IBus>(), "migration-status")
{
AutoSubscriberMessageDispatcher = new DefaultAutoSubscriberMessageDispatcher(new ServiceProviderAdapter(app.Services))
};