我一直在使用Ninject一段时间,并且爱它带给我的代码,但我遇到了一个小小的困境,我不确定是否有问题,或者如果我超越它。DbContext生命周期在WCF服务托管在IIS中
场景:在IIS中托管的WCF服务应用程序。 EF6 RC1作为ORM,将DbContext派生类注入到我的数据库中的数据库类中。使用JustMock(Telerik)执行我所有的单元测试,模拟注入到db类中的dbcontext来执行这些特定的单元测试。
新增
kernel.Bind<MyContext>().ToSelf().InRequestScope();
每http://www.davepaquette.com/archive/2013/03/27/managing-entity-framework-dbcontext-lifetime-in-asp-net-mvc.aspx我Ninject模块。 WCF服务的
服务行为是:
InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false
每戴夫·帕克特的文章,这是为MVC4,不WCF写的,生命周期是通过OnePerRequestHttpModule登记(DynamicModuleUtility.RegisterModule(typeof运算处理( 。OnePerRequestHttpModule))当我添加了Ninject WCF NuGet包,添加下列启动():
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
我的问题是:什么是鉴于WCF服务公开端点呐我的DbContext的生命周期medpipes和TCP(没有HTTP端点),其上下文更多的是PerSession,而不是PerCall,它托管在IIS中?
任何有识之士将不胜感激。
你在哪里设置PerCall ContextMode?谢谢! – CesarD
[本文](http://www.codeproject.com/Articles/86007/ways-to-do-WCF-instance-management-Per-call-Per)演示如何设置上下文模式。将上下文模式设置为PerCall可以解决我在使用Ninject WCF扩展时遇到了错误“操作无法完成,因为DbContext已经处理完毕”(我只是在它工作之前做了一次清理/重建)的问题。 – dtryan