0

Я использую простой инжектор для IoC и Rebus, служебную шину, чтобы отправлять события, сохраненные в нескольких очередях (теме). Ребус должен быть настроен с новым SimpleInjectorContainerAdapter для каждой очереди.Как разделить Singleton Single SignalR между несколькими экземплярами Simple Injector

var bus = Configure.With(new SimpleInjectorContainerAdapter(container)) 

В этой фазе конфигурации не представляется возможным передать тот же экземпляр простого инжектора контейнера ни одного экземпляра контейнера адаптера (контейнер поднимается ошибка многократной регистрации IBUS).

Я также использую SignalR как один из обработчиков событий для отправки событий клиентам.
После this SignalR configuration tutorial Я установил несколько концентраторов и относительных уведомлений о событиях (по одному для каждого bounded context в приложении).
Используя классическую одноплодной шаблон, как показано в учебнике, например, легко пройти один и тот же экземпляр уведомителя различных экземпляров контейнеров:
container.RegisterSingleton(Finishing.Notification.Notifier.Instance);

Теперь я хотел бы делегировать создание экземпляра к простой Инжектор контейнер (только один), так что я начал следовать this tutorial:

 container.RegisterSingleton<Finishing.Notification.Notifier>(); 
     container.Register(() => GlobalHost.ConnectionManager.GetHubContext<Finishing.Notification.NotificationHub>().Clients); 

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

Я знаю, что могу решить эту проблему using a master container as Abstract Factory, но я ищу более конкретное решение.
Спасибо.

+1

Вы решили [переопределить существующие регистрации] (http://simpleinjector.readthedocs.io/en/latest/howto.html#override-existing-registrations), чтобы устранить первоначальную ошибку * множественную регистрацию IBus *? – qujck

+0

Могу ли я спросить, почему именно вы хотели бы избежать шаблона локатора обслуживания? Казалось бы, это будет хорошо подходить для вашего требования. – ravi

+0

@ravi Я бы хотел, чтобы избежать локатора обслуживания, потому что я знаю, что это [анти-шаблон] (http://blog.ploeh.dk/2010/02/03/ServiceLocatorisanAnti-Pattern/) – ilcorvo

ответ

0

Теперь я хотел бы делегировать создание экземпляра для простых инжектора контейнеров

(...)

Вопрос этот путь у меня будет п экземпляр уведомителя один для каждого экземпляра контейнера ,

Таким образом, вы хотели бы, чтобы каждый контейнер создавал экземпляр singleton, но проблема в том, что каждый контейнер содержит экземпляр singleton ... Разве это не противоречие?

+0

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

+0

А, тогда я понял. Так что это не связано с Rebus, это скорее вопрос SimpleInjector? – mookid8000

Смежные вопросы