【发布时间】:2014-02-10 10:27:53
【问题描述】:
我继承了一个 Windows 服务,其中所有依赖项都是在服务启动时创建并注入到瞬态范围内。
我们在使用这个服务时遇到了很多问题,尤其是我们有一个 DbContext,它在服务运行的整个过程中都存在,并且每次都会注入它的不同实例。
我想重构,以便每个工作线程都有自己的 DbContext 注入,它将在每个滴答声的持续时间内存在。
我看过custom scope。对于单线程应用程序来说它看起来不错,但对于多线程应用程序却不是。我也考虑过InThreadScope。虽然这会给每个线程它自己的实例,但就线程而言,它们是单例的,因此它不满足每次滴答的要求。
我目前的想法是使用named scope extension 并注入一个作用域工厂,我可以使用它在每个刻度上创建一个新作用域。
这是要走的路吗?任何建议、提示或替代方案将不胜感激。
更新
由于时间限制,我们最终使用了命名范围,但它不如@BatteryBackupUnit 的解决方案干净。在图的下方有一些依赖项需要 DbContext,我们必须再次注入作用域工厂来获取它。使用@BatteryBackupUnit 的解决方案,我们可以重用ThreadLocal 存储中的相同实例。
【问题讨论】:
标签: c# multithreading entity-framework ninject