如何正确处理IHttpModule?

时间:2010-08-06 13:55:40

标签: c# asp.net httpmodule

我见过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方法中订阅的事件吗?

2 个答案:

答案 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();
  } 
}