10

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

几分钟后试图找出 InRequestScope 不再可用的原因,我发现它现在是 Ninject.Web.Common 的扩展。

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

在我从 NinjectModule 继承的类中,我有一个像这样的简单绑定:

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

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

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

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

如果我在调试模式下查看这两个属性的 HashCode 的值,它们都有不同的值,但 HttpContext 是相同的;我有同样的要求。

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

非常感谢你。

4

2 回答 2

10

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

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

于 2012-05-15T18:13:57.237 回答
7

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

于 2012-05-14T23:09:27.870 回答