在Application_End中处理Windsor与在HttpApplication.Dispose中处理WindWi

本文关键字:处理 HttpApplication Dispose WindWi 与在 Windsor End Application | 更新日期: 2023-09-27 18:28:28

我有一个ASP.NET MVC项目,我正在使用Castle.Windsor。它在Global.asax文件中设置,并附加到HttpApplication。直到最近,我一直在用Dispose方法处理容器:

public override void Dispose()
{
    Container.Dispose();
    base.Dispose();
}

但是,在过去几天的调试中,我注意到(通常是第二次运行VS.NET开发服务器时)我收到了以下错误:

作用域已被释放。这很可能是调用代码中的错误。

我在castle项目用户Google组中发现了模糊的引用,将Container.Dispose()调用放在Application_End中。所以我已经这样做了,现在似乎不再出现错误了。。。至少到目前为止。

我不明白有什么不同。是否存在调用Dispose而未调用Application_End的情况?如果是这样的话,那么在下一个请求中如何仍然使用已处理的应用程序?

在Application_End中处理Windsor与在HttpApplication.Dispose中处理WindWi

是否存在调用Dispose而未调用Application_End的情况?

是的。

如果是这样的话,那么在下一个请求中如何仍然使用已处理的应用程序?

事实并非如此。

Asp.Net将创建HttpApplication派生类的多个实例,并使用它们来处理请求,但它只会调用Application_Start和Application_End一次,周期。