NinjectHttpModule
出于某种原因,当我在 MVC 4 应用程序中使用时,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;
}
}
....
}
当 aTriggerEventRegistry
被注入我的控制器(在同一个请求上)时,TriggerEventRegistry.count
equals 2
。如果我在 上注释掉构造函数RegisterTriggerComponentsHttpModule
,那么TriggerEventRegistry.count
equals的值1
(应该是因为应该只有一个实例/请求)。
这是绑定代码:
Bind<ITriggerEventRegistry>().To<TriggerEventRegistry>().InRequestScope();
对此的任何帮助将不胜感激!
笔记
我什至使用 curl 向我的应用程序发出请求,以避免浏览器发出多个 HTTP 请求来寻找资产、网站图标或类似的东西。仍然没有喜悦。
更新
经过进一步调查,我还看到 ctor 和Init
方法RegisterTriggerComponentsHttpModule
被调用了两次。