C# 当不再使用语句时,使用ninject处理EF DbContext

C# 当不再使用语句时,使用ninject处理EF DbContext,c#,asp.net-mvc-4,dependency-injection,ninject,idisposable,C#,Asp.net Mvc 4,Dependency Injection,Ninject,Idisposable,我正在使用SQL server 2008,.NET4.5,MVC4,EF6和Ninject3.2 我有一个应用程序需要迁移才能将DI与Ninject一起使用DbContext必须注入控制器的是onlineregal 目前,它在以下每个操作中使用 using (var db = new OnlineLegal()) { ... } 这使得它在使用和处置OnlineLegal时清晰可见 如果我要设置ninjectkernel.Bind().

我正在使用
SQL server 2008
.NET4.5
MVC4
EF6
Ninject3.2

我有一个应用程序需要迁移才能将DI与Ninject一起使用
DbContext
必须注入控制器的是
onlineregal

目前,它在以下每个操作中使用

 using (var db = new OnlineLegal())
            {
    ...
            }
这使得它在使用和处置
OnlineLegal
时清晰可见


如果我要设置ninject
kernel.Bind().ToSelf().InRequestScope()这是否足以确保它位于MVC4中?如果不是,我是否应该
OnePerRequestModule
?或者用其他方法来做?

这就足够了。如果已安装软件包;-)

然而,最近有很多问题是关于RequestScope中的
不起作用。我认为目前ninject设置有点错误,容易出错和/或出现包安装/升级例程问题

因此,我建议使用
.InRequestScope()
,但同时添加一个(示例和自动)集成测试,以验证
.InRequestScope()
是否确实正确执行了处理。 这将向您展示您已经正确地集成了它,如果将来包升级例程出现问题,您将立即发现并修复它,而不是在生产中或通过一些模糊的效果来发现

文档链接:

Ninject.MVC4依赖于Ninject.Web.Common.Webhost。Ninject.Web.Common.WebHost将代码添加到应用程序的app_start文件夹中。
NinjectWebCommon.cs加载
OnerPerRequestModule
。但是,如果删除该文件,则会破坏
.InRequestScope()
。这样做的坏处在于,它毫无例外地失败了。您仍然可以绑定
.InRequestScope()
,但它不会有任何效果。

我认为只要有一个项目专家来确认就足够了。谢谢,不客气。我对答案进行了一些扩展,以说明它是如何工作的,以及为什么它会很危险。请确保将Ninject.Web.Common包更新为最新版本。