Ninject使用NinjectHttpModule时创建一个额外的实例

时间:2013-03-30 08:10:03

标签: c# asp.net-mvc ninject

出于某种原因,当我在我的MVC 4应用程序中使用NinjectHttpModule时,Ninject正在创建我的对象的附加实例。

如果我使用NinjectHttpModule(Ninject.MVC3默认值)但实际上没有任何需要构造函数注入的IHttpModule类,它可以正常工作。但是一旦我创建了一个实现IHttpModule的类并且需要构造函数注入的类,Ninject由于某种原因会创建我的对象的两个实例。

我在正在复制的类中添加了一些跟踪代码,以验证它是否被复制。每次创建实例时,静态计数变量都会递增:

namespace Trigger.Events
{
    public class TriggerEventRegistry : ITriggerRegistry
    {
        private static int count;

        public TriggerEventRegistry()
        {
            TriggerEventRegistry.count++;
        }
    }
 }

这是我的IHttpModule

namespace TriggerDevelopment.ApplicationTriggers
{
    public class RegisterTriggerComponentsHttpModule : IHttpModule
    {
        ITriggerEventRegistry eventRegistry;

        public RegisterTriggerComponentsHttpModule(ITriggerEventRegistry eventRegistry)
        {
            this.eventRegistry = eventRegistry;
        }
     }
     ....
}

TriggerEventRegistry被注入我的控制器时(在同一请求中),TriggerEventRegistry.count等于2。如果我在RegisterTriggerComponentsHttpModule上注释掉构造函数,那么TriggerEventRegistry.count的值等于1(应该只应该有一个实例/请求)。

这是绑定代码:

Bind<ITriggerEventRegistry>().To<TriggerEventRegistry>().InRequestScope();

对此的任何帮助将不胜感激!

注意

我甚至使用curl向我的应用程序发出请求,以避免浏览器发出多个HTTP请求,寻找资产,图标或类似内容。仍然没有快乐。

更新

经过进一步调查,我也发现ctor和Init RegisterTriggerComponentsHttpModule方法被调用了两次。

1 个答案:

答案 0 :(得分:0)

它会像你的请求一样多次调用你的HttpModule。例如,大多数Web浏览器提交至少两个请求,即页面请求和favicon请求。尝试在页面中添加类似图像的内容,看看是否有三个请求......