C# 无法获取Ninject以处理请求范围中的对象

C# 无法获取Ninject以处理请求范围中的对象,c#,asp.net,asp.net-mvc,asp.net-web-api,ninject,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,Ninject,无论我做什么,我似乎都无法让Ninject在带有web API的ASP.NET MVC应用程序中处理请求范围内的对象 我在做什么: 使用Visual Studio 2013创建新的ASP.NET Web应用程序。我选择MVC模板并向其添加一个Web API。默认情况下,它在包中也有ASP.NET标识 我通过nuget安装包Ninject.MVC5安装Ninject.MVC5 我在我的应用程序中添加了以下类: 公共类:IDisposable { 公共空间处置 { System.Diagnostic

无论我做什么,我似乎都无法让Ninject在带有web API的ASP.NET MVC应用程序中处理请求范围内的对象

我在做什么:

使用Visual Studio 2013创建新的ASP.NET Web应用程序。我选择MVC模板并向其添加一个Web API。默认情况下,它在包中也有ASP.NET标识 我通过nuget安装包Ninject.MVC5安装Ninject.MVC5 我在我的应用程序中添加了以下类:

公共类:IDisposable { 公共空间处置 { System.Diagnostics.Debug.WriteLinetest; } }

我在NinjectWebCommon RegisterServices方法中添加了以下绑定

kernel.Bind.ToSelf.InRequestScope

我将SomeDisposable类型的对象添加到主控制器

公共家庭管制员 { }

我运行应用程序并在HomeController构造函数和SomeDispose类的Dispose方法中放置一个断点。控制器可能从Ninject接收对象,页面加载,但从未调用Dispose方法

在这一点上,事情已经被打破了,但我添加了一个Web API控制器,安装Ninject.WebApi打包,并使用WebApi控制器重复实验,我得到了相同的结果

我已经阅读了大量的问题,包括这个问题和Ninject文档,它们都表明,由于Ninject.Web.Common包含了OnePerRequestHttpModule的注册,是的,它在那里,处理应该可以正常工作,但没有。我还尝试在web.config中添加PerRequest模块,但出现了一个错误,表示无法将此部分设置为集成模式


在这一点上我迷路了。我怀疑集成模式或OWIN与此有关,但我不知道如何调试它或如何修复它。有什么建议吗?

未处理的对象是版本3.2.2之前的Ninject.Web.Common中的一个问题,如下所述:

由于您一直在通过nuget安装Ninject,因此可能安装了最早支持的依赖项。这可以通过以下方法避免:

Install-Packages Ninject.MVC5 -DependencyVersion Highest

请验证您使用的是所有Ninject软件包的当前版本。

我刚才遇到过这种情况,请确保您拥有所有Ninject依赖项的最新版本。提供用于确定请求范围的功能的程序有一个bug,该bug在对象上停留的时间比需要的时间长得多,并在以后的版本中修复。抱歉说得含糊不清,我记不起相关的名称/版本。一些人还报告了更新问题-而在更新之后。InRequestScope根本不起作用。AFAIR按照正确的顺序拆卸和重新安装所有软件包是关键。。但不要问我是哪个序列;我觉得荒谬的是,如果不改变默认配置,我就不能让它在一个空项目上工作。我用了更新,而不是安装新的软件包。你知道安装最旧的依赖项而不是最新的非测试依赖项背后的原因吗?@Stillgar有一个关于此功能的讨论线索:我从2012年3月开始使用3.0.0.7,我想知道这是否显示了问题——我认为没有,因为我有一个RavenDB会话绑定到InRequestScope,它肯定会因为我超过了30个req/会话的默认限制而对我大发雷霆。我来这里是想找另一个问题,我想可能就是这个问题。即使不是,很高兴知道这件事!我有这个问题,我有版本3.3.1,但是,它确实处理了一些时间,有些时间没有。我在构造函数中添加了一个控制台输出,在dispose中添加了一个控制台输出,尽管dispose确实在某些时候执行,但它也不是一直执行。有什么想法吗?