最近,我将我的一个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 3的新版Ninject.Web.Common.InRequestScope吗?
非常感谢。
答案 0 :(得分:10)
已添加为答案,因此可以将其关闭
请勿使用自定义工厂。只需安装Ninject.MVC3并将绑定复制到NinjectWebCommon.cs文件,然后删除所有旧代码。
答案 1 :(得分:7)
Ninject.Web.Common不能单独使用。您必须使用一些额外的web或wcf扩展或自己实现InRequestScope。