如何在Simple Injector的多个实例之间共享SignalR单例

时间:2016-11-07 11:05:30

标签: singleton signalr inversion-of-control simple-injector rebus

我正在使用Simple Injector for IoC和Rebus(服务总线)来调度保存在多个队列中的事件(主题)。 Rebus需要为每个队列配置一个新的 SimpleInjectorContainerAdapter

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

在此配置阶段,无法将简单注入器容器的同一实例传递给容器适配器的相同实例(容器会出现多次注册IBus的错误)。

我也使用SignalR作为向客户发送事件的事件处理程序之一 在this SignalR configuration tutorial 之后,我设置了多个中心和相对事件通知程序(应用程序中每个bounded context一个)。
使用经典的单例模式,如教程示例所示,很容易将相同的通知程序实例传递给容器的各种实例:
container.RegisterSingleton(Finishing.Notification.Notifier.Instance);

现在我想将实例创建委托给Simple Injector容器(只有一个),所以我开始关注this tutorial

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

问题在于,通过这种方式,我将为每个容器实例提供一个通知器实例(非常令人遗憾)。

我知道我可以解决这个using a master container as Abstract Factory,但我正在寻找更具体的解决方案 感谢。

1 个答案:

答案 0 :(得分:0)

  

现在我想将实例创建委托给Simple Injector容器

     

(...)

     

问题是这样我每个容器实例都会有一个通知器实例。

所以你希望每个容器都能创建单例实例,但是每个容器都有一个单例的实例是一个问题......这不是一个矛盾吗?