我正在使用SQL server 2008
,.NET4.5
,MVC4
,EF6
和Ninject3.2
。
我有需要迁移的应用程序才能在Ninject中使用DI。必须注入控制器的DbContext
是OnlineLegal
目前,它在每个操作中都使用了以下内容。
using (var db = new OnlineLegal())
{
...
}
这使得OnlineLegal
被使用和处置的地方清晰可见。
如果我要设置ninject kernel.Bind<OnlineLegal>().ToSelf().InRequestScope();
这是否足以确保它在MVC4中为disposed properly on each request?如果不是,我应该manually register OnePerRequestModule
?或者用其他方式做到这一点?
答案 0 :(得分:2)
这就足够了。如果您已安装Ninject.MVC4包; - )。
但是,最近有一些关于InRequestScope
无效的问题。我认为目前ninject设置有点容易出错和/或包安装/升级程序问题。
因此我建议使用.InRequestScope()
,但也要添加一个(示例和自动化)集成测试,以验证.InRequestScope()
是否实际正确执行了处理。
这将向您显示您已正确集成它,如果将来应该遇到包升级程序的问题,您可以立即找到并修复它,而不是在生产中或通过一些模糊的效果查找。
文档链接:https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope
Ninject.MVC4依赖于Ninject.Web.Common.Webhost。 Ninject.Web.Common.WebHost将NinjectWebCommon.cs代码添加到应用程序的app_start文件夹中。
NinjectWebCommon.cs加载OnerPerRequestModule
。但是,如果删除该文件,则会中断.InRequestScope()
。关于这一点的坏处是,它无一例外地失败。你仍然可以绑定.InRequestScope()
,但它只是没有任何效果。