我使用 Ninject 已经有一段时间了,很喜欢它给我的代码带来的东西,但我遇到了一个小难题,不确定是否存在问题,或者我是否想多了。
场景:在 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
Per Dave Paquette 的文章是为 MVC4 而不是 WCF 编写的,生命周期是通过注册 OnePerRequestHttpModule (DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)) 来处理的。当我添加 Ninject WCF nuget 包时,在 Start 中添加了以下内容():
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
我的问题是:鉴于 WCF 服务公开了命名管道和 TCP 的端点(没有 HTTP 端点),我的 dbcontext 的生命周期是什么,它的上下文更多的是 PerSession,而不是 PerCall 并且它托管在 IIS 中?
任何见解将不胜感激。