我见过IHttpModule的所有实现看起来如下:
class HttpCompressionModule : IHttpModule
{
public void Init(HttpApplication application)
{
application.SomeEvent += OnSomeEvent;
}
private void OnSomeEvent(Object source, EventArgs e)
{
// ...
}
public void Dispose()
{
// nothing here !!!
}
}
我想知道为什么Dispose
方法总是空的?我们不应该取消订阅我们在Init
方法中订阅的事件吗?
答案 0 :(得分:24)
HttpModule的生命周期与HttpApplication的生命周期紧密集成。应用程序启动时会生成HttpModule实例,并在处理应用程序时将其销毁。
在这种情况下,取消订阅该事件毫无意义,因为无论如何都要处理发布者(HttpApplication)。当然,在发布者没有被处置的情况下,取消事件处理程序是正确的。
答案 1 :(得分:3)
如果需要在模块中实例化IDisposable对象,dispose方法将不为空。
class HttpCompressionModule : IHttpModule
{
private IDisposalbe _myResource;
public void Init(HttpApplication application)
{
_myResource = new MyDisposableResource();
application.SomeEvent += OnSomeEvent;
}
private void OnSomeEvent(Object source, EventArgs e)
{
// ...
myResource.DoSomething();
}
public void Dispose()
{
_myResource.Dispose();
}
}