Ninject 3 InRequestScope 不为同一请求返回相同的实例

本文关键字:返回 实例 请求 InRequestScope Ninject | 更新日期: 2023-09-27 18:34:05

最近,我将我的一个MVC3项目从Ninject 2升级到Ninject 3。

在尝试查找为什么InRequestScope不再可用后,我发现它现在是Ninject.Web.Common的扩展。

现在,当我尝试运行应用程序时,Ninject 的工作方式就像与范围 InRequest 绑定的所有类型都是 InTransientScope;每次都会创建一个新实例。

在我的从 NinjectModule 继承的类中,我有一个简单的绑定,如下所示:

Bind<ViewModel.Activity>().ToSelf().InRequestScope();

在我的控制器中,我有 2 个类型为 ViewModel.Activity 的属性,标有 Ninject 属性。

  [Inject]
  public ViewModel.Activity Activity { get; set; }
  [Inject]
  public ViewModel.Activity Activity1 { get; set; }

如果我在调试模式下查看这两个属性的哈希代码的值,它们都有不同的值,但 HttpContext 是相同的;我在同一个请求中。

关于如何正确使用新的Ninject.Web.Common.InRequestScope和新版本的Ninject 3,我错过了什么?

谢谢。

Ninject 3 InRequestScope 不为同一请求返回相同的实例

添加为答案,因此可以将其关闭

不要使用自定义工厂。只需安装 Ninject.MVC3 并将绑定复制到 NinjectWebCommon.cs 文件中,然后删除所有旧代码。

Ninject.Web.Common 不能单独使用。您必须使用一些额外的 Web 或 wcf 扩展,或者自己实现 InRequestScope。