我们有实现IMessageService.RegisterHandler<T>(Func<IMessage<T>, object>)
的逻辑。在消息队列的执行块中,我们使用Funq.Container自动连接服务。服务的属性是依赖注入的,但似乎是在线程之间共享。属性类定义如下:
_Container.RegisterAutoWired<DbConnectionManager>().ReusedWithin(Funq.ReuseScope.Request);
大多数情况下,DbConnectionManager属性是作为新对象创建的。但是,在一些非常繁忙的时间,我们注意到DbConnectionManager在线程之间重用并导致问题。
我的问题是:Web请求和消息队列使用的依赖注入对象的生存期设置是什么?对于我们遇到的这个特殊问题的任何见解?万分感谢!
答案 0 :(得分:0)
不要将请求范围用于MQ请求。如果依赖项是ThreadSafe,请使用默认的单例注册:
container.RegisterAutoWired<DbConnectionManager>();
否则,如果它不是线程安全的,则将其注册为瞬态依赖:
container.RegisterAutoWired<DbConnectionManager>().ReusedWithin(ReuseScope.None);