无法让 Ninject 在请求范围内释放对象

本文关键字:范围内 释放 对象 请求 Ninject | 更新日期: 2023-09-27 18:33:10

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

我在做什么:

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

    公开课 一些一次性的 : 可识别的{ 公共无效 处置(( { System.Diagnostics.Debug.WriteLine("test"(; }}

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

    内核。绑定((。到自我((。InRequestScope((;

  • 我将某种一次性类型的对象添加到家庭控制器

    公共家庭控制器(一些一次性一些({}

  • 我运行应用程序并在 HomeController 构造函数和 SomeDisposable 类的 Dispose 方法中放置一个断点。控制器接收一个对象(可能来自 Ninject(,页面加载,但永远不会调用 Dispose 方法

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

我已经读过很多问题,包括这个问题 - Ninject 在超出范围时不会对对象调用 Dispose 和 Ninject 文档 https://github.com/ninject/Ninject.Web.Common/wiki/InRequestScope,它们都表明由于 Ninject.Web.Common 包含 OnePerRequestHttpModule 的注册(是的,它在那里(,处置应该只是工作,但它没有。我还尝试在 web.config 中添加 PerRequest 模块,但收到一条错误消息,指出我无法在集成模式下使用此部分。

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

无法让 Ninject 在请求范围内释放对象

未释放的对象是版本 3.2.2 之前的Ninject.Web.Common中的问题,如下所述: InRequestScope 无法释放对象

由于您一直在通过 nuget 安装 Ninject,因此您可能安装了最早的受支持依赖项。这可以通过使用:

Install-Packages Ninject.MVC5 -DependencyVersion Highest

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