Asp.net mvc ASP.NET MVC+;Ninject:InRequestScope
我想使用ninject InRequestScope创建PerRequestResourceProvider的实例:Asp.net mvc ASP.NET MVC+;Ninject:InRequestScope,asp.net-mvc,dependency-injection,ninject,Asp.net Mvc,Dependency Injection,Ninject,我想使用ninject InRequestScope创建PerRequestResourceProvider的实例: public class PerRequestResourceProvider: IPerRequestResourceProvider { priavte readonly _perRequestResorceInstance; public PerRequestResourceProvider() { _perRequestResorc
public class PerRequestResourceProvider: IPerRequestResourceProvider
{
priavte readonly _perRequestResorceInstance;
public PerRequestResourceProvider()
{
_perRequestResorceInstance = new PerRequestResource();
}
public PerRequestResource GetResource()
{
return _perRequestResorceInstance;
}
}
public interface IPerRequestResourceProvider
{
PerRequestResource GetResource();
}
在我的NinjectDependencyResolver中:
.....
kernel.Bind<IPerRequestResourceProvider>.To<PerRequestResourceProvider>().InRequestScope();
。。。。。
kernel.Bind.To().InRequestScope();
我在几个类中注入IPerRequestResourceProvider。但当我向PerRequestResourceProvider构造函数添加断点时,我看到PerRequestResourceProvider在一个请求期间创建了三次,而不是每个请求创建一次。怎么了
更新:源代码ttps://bitbucket.org/maximtkachenko/ninjectinrequestscope/src您的代码有两个问题:
PerRequestResourceProvider
(类类型)而不是IPerRequestResourceProvider
(接口类型)注入HomeController
,因此在IPerRequestResourceProvider
绑定上定义的.InRequestScope()
没有任何效果。更改HomeController
构造函数以注入接口类型,就可以了Ninject不需要可实例化(非抽象,…)类的绑定。这就是为什么在使用错误绑定时不明显的原因。如果是这种情况,您应该发布一个最小但完整的样本来重现问题。因此,我们/您可以在@ninject创建错误报告或帮助您解决问题。你可以创建一个最小的解决方案,上传并链接它。@BatteryBackupUnit我已经添加了源代码@BatteryBackupUnit我已经修复了HomeController contsructor,但结果是一样的:在请求过程中调用了3次PerRequestResourceProvider构造函数。是的,我也观察到了这一点。据我所知,我认为您没有将ninject正确地集成到解决方案中。ninject没有抛出异常,这太糟糕了。我想您需要ninject.MVC3或ninject.extensions.MVC5之类的东西。ninject.web.common文件的初始化不正确。@BatteryBackupUnit我已经安装了ninject.MVC4,现在它可以正常工作了。谢谢