NinjectHttpApplication

NinjectHttpApplication

我最近尝试了扩展名为NinjectNinject.Web.Mvc,并且发现了一些奇怪的东西,虽然没有中断,但令人困惑。

NinjectHttpApplication抽象类中,有一个定义如下的构造函数。

    /// <summary>
    /// Initializes a new instance of the <see cref="NinjectHttpApplication"/> class.
    /// </summary>
    protected NinjectHttpApplication()
    {
        this.onePerRequestModule = new OnePerRequestModule();
        this.onePerRequestModule.Init(this);
    }


我在这里放置了一个调试器断点,这被调用了几次。我找不到任何真实的文档。在实现代码中,这一行引起了我的注意。

            if (kernel.Settings.Get("ReleaseScopeAtRequestEnd", true))
            {
                OnePerRequestModule.StartManaging(kernel);
            }


我的问题如下...


什么是OnePerRequestModule
为什么多次调用此构造函数?
如果构造函数被多次调用,此StartManaging方法的目的是什么?

最佳答案

OnePerRequestModule在每个HTTP请求完成后从内核的Cache中删除InRequestScope() d个对象。

NinjectHttpApplication ctor被称为多次,因为IIS创建了多个。一个NinjectHttpApplication一次只能处理一个请求。因此,IIS每个线程生成(至少)一个实例。

StartManaging告诉所有OnePerRequestModules他们将在请求结束后从指定的内核释放InRequestScoped对象。

10-04 16:39