5

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.countequals 2。如果我在 上注释掉构造函数RegisterTriggerComponentsHttpModule,那么TriggerEventRegistry.countequals的值1(应该是因为应该只有一个实例/请求)。

这是绑定代码:

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

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

笔记

我什至使用 curl 向我的应用程序发出请求,以避免浏览器发出多个 HTTP 请求来寻找资产、网站图标或类似的东西。仍然没有喜悦。

更新

经过进一步调查,我还看到 ctor 和Init方法RegisterTriggerComponentsHttpModule被调用了两次。

4

1 回答 1

0

它会根据请求多次调用您的 HttpModule。例如,大多数网络浏览器至少提交两个请求,页面请求和网站图标请求。尝试在页面中添加图像之类的内容,看看是否收到三个请求...

于 2013-05-09T03:18:20.203 回答