【发布时间】:2020-07-07 04:37:09
【问题描述】:
我正在使用 MassTransit 通过 RabbitMQ 发布\订阅消息。我想在消费者中注入依赖项,以便消费者可以将数据插入数据库。但是,我发现文档中的示例令人困惑。
public class MessageConsumer : IConsumer<Message>
{
private IDao dao;
public MessageConsumer(IDao dao)
{
this.dao = dao;
}
public async Task Consume(ConsumeContext<Message> context)
{
Console.WriteLine("Order Submitted: {0}", context.Message.MessageId);
}
}
总线配置如下
static void Main(string[] args)
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<ConcreteDao>().As<IDao>();
builder.RegisterType<MessageConsumer>().As<IConsumer<Message>>();
builder.AddMassTransit(x => {
// add the bus to the container
x.UsingRabbitMq((context, cfg) => {
cfg.Host("localhost");
cfg.ReceiveEndpoint("MessageQueueName", ec => {
// Configure a single consumer
ec.ConfigureConsumer<MessageConsumer>(context);
});
// or, configure the endpoints by convention
cfg.ConfigureEndpoints(context);
});
});
var container = builder.Build();
var bc = container.Resolve<IBusControl>();
bc.Start();
}
但是,当 IBusControl 被解决时,我得到了一个异常。
System.ArgumentException: 'The consumer type was not found: StationDashboard.Messaging.Consumer.OperationModeChangedConsumer (Parameter 'T')'
上面的代码有什么问题?向消费者注入依赖的最佳方式是什么?如果有完整的工作样本会有所帮助。
【问题讨论】:
标签: c# rabbitmq autofac masstransit