Asp.net mvc ASP.NET MVC+;Ninject:InRequestScope

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

我想使用ninject InRequestScope创建PerRequestResourceProvider的实例:

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您的代码有两个问题:

  • Ninject未正确初始化。 您需要一个Ninject.MVCx包(根据您使用的MVC版本)。要正确配置,请参阅:

  • 您正在将
    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,现在它可以正常工作了。谢谢