Sim*_*een 5 ninject quartz.net dbcontext
在执行Quartz.Net作业实现期间,通过Ninject依赖解析器实例化的DbContext实现使用的最佳范围是什么?如果我使用了线程范围,如果使用Quartz线程池中的相同线程多次执行作业,是否会提供相同的DbContext实例?
我想要一个范围,这意味着每次触发作业时我都会获得一个(并且只有一个)DbContext的新实例.
是的,我建议不要使用InThreadScope
.使用线程池线程时,会发生泄漏.
此外,ninject中没有像"QuartzScope"那样内置,所以你必须创建自己的解决方案.让我们从作业的实例化开始.这所涵盖这个计算器的答案,更广泛的,通过这个NuGet包的源代码.
现在一种可能的解决方案是扩展JobFactory以管理其创建DbContext
并将其注入作业及其所有依赖项(作为继承ConstructorArgument
参数).但是,这有两个缺点:总是创建一个DBContext
(无论作业是否需要它),并且你需要跟踪DBContext
实例,以便你可以.Dispose()
在IJobFactory.ReturnJob(IJob)
方法中使用它们(p.ex.由a Dictionary<IJob, DBContext
或者喜欢).
更简单的方法是使用.InCallScope
(包含在Ninject.Extensions.NamedScope中)进行DbContext
绑定.这将创建一个DbContext
实例kernel.Get<FooJob>()
.
如果你需要有不同的范围DbContext
- 取决于你使用它们的位置,p.Ex.在一个Job和你的ASP.NET MVC内部,你可能想看一下Ninject Conditional Self bind来改变范围(For Task-scheduler)不能正常工作?
归档时间: |
|
查看次数: |
1226 次 |
最近记录: |