ASP.NET MVC + Ninject:InRequestScope [英] ASP.NET MVC + Ninject: InRequestScope

查看:83
本文介绍了ASP.NET MVC + Ninject:InRequestScope的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to create instance of PerRequestResourceProvider using ninject InRequestScope:

public class PerRequestResourceProvider: IPerRequestResourceProvider
{
    priavte readonly _perRequestResorceInstance;
    public PerRequestResourceProvider()
    {
        _perRequestResorceInstance = new PerRequestResource();
    }
    public PerRequestResource GetResource()
    {
        return _perRequestResorceInstance;
    }
}

public interface IPerRequestResourceProvider
{
     PerRequestResource GetResource();
}

在我的NinjectDependencyResolver中:

In my NinjectDependencyResolver:

.....
kernel.Bind<IPerRequestResourceProvider>.To<PerRequestResourceProvider>().InRequestScope();

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

I inject IPerRequestResourceProvider in few classes. But when I add breakpoint to PerRequestResourceProvider constructor I see that PerRequestResourceProvider is created three times during one request and not single per request. What's wrong?

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

Update: source code ttps://bitbucket.org/maximtkachenko/ninjectinrequestscope/src

推荐答案

您的代码有两个问题:

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

  1. Ninject is not getting initialized correctly. You need one of the Ninject.MVCx packages (according to the MVC version you are using). To configure it correctly, see: http://github.com/ninject/ninject.web.mvc

您正在将PerRequestResourceProvider(类类型)而不是IPerRequestResourceProvider(接口类型)注入到HomeController中,因此在IPerRequestResourceProvider绑定上定义的.InRequestScope()无效. .更改HomeController构造函数以注入接口类型,您就很好.

You are injecting PerRequestResourceProvider (the class type), and not IPerRequestResourceProvider (the interface type) into HomeController, thus the .InRequestScope() defined on the IPerRequestResourceProvider binding is not taking any effect. Change the HomeController constructor to get the inteface type injected and you're good.


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


Ninject does not require bindings for instantiatable (non-abstract,..) classes. This is why it is not obvious when the wrong binding is used.

这篇关于ASP.NET MVC + Ninject:InRequestScope的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆