多个RabbitMQ交换和队列的DI配置

时间:2018-09-15 10:44:44

标签: c# dependency-injection rabbitmq

我正在尝试为EventBusRabbitMQ实现配置DI。对于单个交换队列来说,它工作得很好。

 services.AddSingleton<IEventBus, EventBusRabbitMQ>(serviceProvider =>
 {
     ...

     return new EventBusRabbitMQ(connection, "exchange_EX1", "queue_Q1",..);
 });

并在应用程序配置中

var eventBus = app.ApplicationServices.GetRequiredService<IEventBus>();

eventBus.Subscribe<FooEvent, FooEventHandler>;

我想用EventBusRabbitMQ的不同配置注册多个实现,以便在解决IEventBus时可以选择要选择的交换和队列。

我所不希望的是明确实现,因为唯一不同的只是交换和队列。

services.AddSingleton<IEventBus, EventBusRabbitMQ_EX1_Q1>
services.AddSingleton<IEventBus, EventBusRabbitMQ_EX2_Q2>

我有哪些替补?

1 个答案:

答案 0 :(得分:0)

我认为,如果您有一套有限的实现,最好的解决方案就是考虑这样的解决方案:

public interface  IEventBusRabbitMQ_EX1_Q1:IEventBus
{
}
public interface  IEventBusRabbitMQ_EX2_Q2:IEventBus
{
}

然后更改代码以注入正确的实例

services.AddSingleton<IEventBusRabbitMQ_EX1_Q1, EventBusRabbitMQ_EX1_Q1>
services.AddSingleton< IEventBusRabbitMQ_EX2_Q2, EventBusRabbitMQ_EX2_Q2>

但是还有另一种解决方法,描述为here

基本上是一种更丰富的模式,但我不建议这样做,因为它会降低代码的可读性。