gpt4 book ai didi

c# - InRequestScope 中的 Ninject 依赖项不会被释放

转载 作者:行者123 更新时间:2023-11-30 16:59:38 25 4
gpt4 key购买 nike

这个问题之前已经被问过很多次,但是对于我来说,我无法让 Ninject 处理 InRequestScope 的服务。我查看了所有答案,其中大部分告诉用户使用 Ninject.MVC3OnePerRequestHttpModule。我正在使用 Ninject.MVC5

这是到达我所在位置的方法:

使用VS2013

  • 添加新项目(ASP.NET Web 应用程序)
  • 选择 MVC 且无身份验证
  • 将 NuGet 引用添加到 Ninject.MVC5
  • 为项目添加接口(interface):

    public interface IBlah : IDisposable
    {
    void DoSomething();
    }
  • 为接口(interface)添加一个实现:

    public class Blah : IBlah
    {
    private static int _count;

    public Blah()
    {
    _count++;
    Debug.WriteLine("Blah nr {0} created", _count);
    }

    public void DoSomething()
    {
    Debug.WriteLine("DoSomething called");
    }

    public void Dispose()
    {
    _count--;
    Debug.WriteLine("Blah disposed. Still left {0}", _count);
    }
    }
  • 打开家庭 Controller 并添加以下 ivar 和构造函数:

    private readonly IBlah _blah;

    public HomeController(IBlah blah)
    {
    _blah = blah;
    }
  • 将以下内容添加到 Index 操作中:

    _blah.DoSomething();
  • 打开 NinjectWebCommon 并将以下行添加到 RegisterServices 方法

    kernel.Bind<IBlah>().To<Blah>().InRequestScope();
  • 调试项目并查看您将看到的调试输出(在系统消息中)

    "Blah nr 1 created"
    "DoSomething called"
  • 在浏览器中点击刷新,你会看到

    "Blah nr 2 created"
    "DoSomething called"
  • 没有任何输出用于处理,也永远不会命中 Dispose 内的断点。

我的测试解决方案可以在这里下载:http://www.upload.ee/files/4044477/NinjectTest.zip.html

我到底做错了什么???


2014 年 5 月 15 日更新

现在有一个新版本 (3.2.2) 的 Ninject.Web.Common 包可用于 NuGet,它修复了这个错误。

最佳答案

我认为这与这个 ninject 问题有关: https://github.com/ninject/ninject/issues/132#issuecomment-42459686

关于c# - InRequestScope 中的 Ninject 依赖项不会被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23542095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com