首页 文章

无法让Ninject在Request Scope中处理对象

提问于
浏览
4

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

我在做什么:

  • 使用Visual Studio 2013创建新的ASP.NET Web应用程序 . 我选择MVC模板并向其添加Web API(默认情况下,它还包含ASP.NET标识)

  • 我通过nuget安装Ninject.MVC5包(install-package Ninject.MVC5)

  • 我在我的应用程序中添加了以下类:

public class SomeDisposable:IDisposable {public void Dispose(){System.Diagnostics.Debug.WriteLine(“test”); }}

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

kernel.Bind()ToSelf()InRequestScope() . ;

  • 我将一个SomeDisposable类型的对象添加到Home控制器

public HomeController(SomeDisposable some){}

  • 我运行应用程序并在HomeController构造函数和SomeDisposable类的Dispose方法中放置一个断点 . 控制器接收一个对象(可能来自Ninject),页面加载但是 the Dispose method is never called .

  • 此时事情已经破碎,但是我添加了一个Web API控制器,安装了Ninject.WebApi打包并用WebAPI控制器重复实验,我得到了相同的结果 .

我已经阅读了一堆问题,包括这一个 - Ninject doesn't call Dispose on objects when out of scope和Ninject文档https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope,它们都表明由于Ninject.Web.Common包含OnePerRequestHttpModule的注册(是的,它在那里),处理应该可行但是它没有't. I also tried adding the PerRequest module in the web.config and got an error saying that I can'这个部分处于集成模式 .

此时我迷失了 . 我怀疑集成模式或OWIN与此有关,但我不知道如何调试它或如何解决它 . 有什么建议?

1 回答

  • 7

    未处理的对象是版本3.2.2之前 Ninject.Web.Common 中的问题,如下所述:InRequestScope is failing to dispose objects

    正如您通过nuget安装Ninject一样,您可能已安装了最早的受支持的依赖项 . 这可以通过使用:

    Install-Packages Ninject.MVC5 -DependencyVersion Highest
    

    请确认您使用的是所有Ninject软件包的当前版本 .

相关问题