出于某种原因,当我在我的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
方法被调用了两次。
答案 0 :(得分:0)
它会像你的请求一样多次调用你的HttpModule。例如,大多数Web浏览器提交至少两个请求,即页面请求和favicon请求。尝试在页面中添加类似图像的内容,看看是否有三个请求......