我使用IoC和Rebus的简单注入器,服务总线,调度保存在多个队列(主题)中的事件。Rebus需要为每个队列配置新的SimpleInjectorContainerAdapter。
var bus = Configure.With(new SimpleInjectorContainerAdapter(container))
在这个配置阶段,既不能传递相同的简单注入器容器实例,也不能传递相同的容器适配器实例(容器会引发多个IBus注册的错误)。
我还使用SignalR作为事件处理程序之一,将事件分派给客户端。
按照SignalR配置教程,我设置了几个集线器和相关事件通知器(应用程序中的每个有界上下文一个)。使用经典的单例模式,如教程示例中所示,很容易将相同的通知器实例传递给容器的各个实例:container.RegisterSingleton(Finishing.Notification.Notifier.Instance);
现在我想把实例创建委托给简单注入器容器(只有一个),所以我开始遵循这个教程:
container.RegisterSingleton<Finishing.Notification.Notifier>();
container.Register(() => GlobalHost.ConnectionManager.GetHubContext<Finishing.Notification.NotificationHub>().Clients);
问题是,通过这种方式,我将有n个通知程序实例,每个容器实例一个(非常遗憾)。
我知道我可以使用主容器作为抽象工厂来解决这个问题,但我正在寻找一个更具体的解决方案。
谢谢。
现在我想把实例创建委托给简单注入器容器
(…)
问题是这样,我将有n个实例的通知器一个每个容器实例。
所以你想为每个容器创建单例实例,但这是一个问题,每个容器持有一个实例的单例…这不是自相矛盾吗?