ASP.NET MVC + Ninject:InRequestScope

时间:2014-07-24 07:55:19

标签: asp.net-mvc dependency-injection ninject

我想使用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();

我在几个类中注入了IPerRequestResourceProvider。但是当我向PerRequestResourceProvider构造函数添加断点时,我发现PerRequestResourceProvider在一个请求期间创建了三次而不是每个请求单个。怎么了?

更新:源代码ttps://bitbucket.org/maximtkachenko/ninjectinrequestscope/src

1 个答案:

答案 0 :(得分:0)

您的代码存在两个问题:

  1. Ninject未正确初始化。 您需要一个Ninject.MVCx包(根据您使用的MVC版本)。要正确配置,请参阅:http://github.com/ninject/ninject.web.mvc

  2. 您正在向PerRequestResourceProvider注入IPerRequestResourceProvider(类类型),而不是HomeController(接口类型),因此在.InRequestScope()上定义了IPerRequestResourceProvider {1}}绑定没有任何效果。更改HomeController构造函数以获取注入的接口类型,并且您很好。


  3. Ninject不需要对可实例化(非抽象,...)类进行绑定。这就是使用错误绑定时不明显的原因。