Конфигурация DI для нескольких обменов и очередей RabbitMQ - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь настроить DI для реализации EventBusRabbitMQ.Это прекрасно работает для одного обмена, очереди ..

 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 голосов
/ 15 сентября 2018

Я думаю, что лучшее решение, если у вас есть конечный набор реализаций, - это рассмотреть решение, подобное этому:

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>

Но есть и другое решение, которое описано здесь

, в основном это более сложный шаблон, но я не рекомендую его, потому что он уменьшает читабельность кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...