我有一个Windows服务,使用NCron定期运行一些作业。我最近介绍了Ninject,并且由于EF上下文(来自EF4.1的ObjectContext)不是GC(我记忆中描述它),因此得到了一些严重的内存问题。
值得一提的是,其中一些工作运行时间很长(10-15分钟)并且数据库密集。我知道EF可能不是这种工作的最佳解决方案,但是现在重构是不可能的。
我在这个主题上找到了相当多的材料,所以我继续:
我似乎无法让第二个工作,我得到一个ActivationException,指出范围不存在。
这是我在调试模式下尝试过的一段简单的代码:
const string Scope = "Scope";
kernel.Bind(c => c.FromThisAssembly()
.SelectAllClasses().InheritedFrom<MyCronJob>()
.BindToSelf()
.Configure(b => b.DefinesNamedScope(Scope)));
kernel.Bind<IMyContext>().To<MyContext>().InNamedScope(Scope);
kernel.Get<ProcessImportJob>().DoWork();
然后
internal class ProcessImportJob : MyCronJob
{
private readonly IMyContext _ctx;
public ProcessImportJob(IMyContext ctx)
为了简洁起见,我为了简洁而裁掉了休息。
我做错了什么?
UPDATE 1 - 构造函数注入工作,当我明确.Get<T>
时发生异常。