为需要注入服务的消费者设置 EasynetQ AutoSubscriber

问题描述 投票:0回答:1

我正在尝试使用 .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。

谢谢

rabbitmq .net-7.0 easynetq
1个回答
0
投票

这是您由于 AutoSubscriber 配置与 MS DI 配合使用而错过的内容

var subscriber = new AutoSubscriber(app.Services.GetRequiredService<IBus>(), "migration-status")
{
    AutoSubscriberMessageDispatcher = new DefaultAutoSubscriberMessageDispatcher(new ServiceProviderAdapter(app.Services))
};
© www.soinside.com 2019 - 2024. All rights reserved.