开发者

How to dispose IHttpModule correctly?

开发者 https://www.devze.com 2023-01-10 18:04 出处:网络
All implementation of IHttpModule I\'ve seen looks following: class HttpCompressionModule : IHttpModule

All implementation of IHttpModule I've seen looks following:

class HttpCompressionModule : IHttpModule
{
  public void Init(HttpApplication application)
  {
    application.SomeEvent += OnSomeEvent;
  }

  private void OnSomeEvent(Object source, EventArgs 开发者_如何学编程e)
  {
    // ...
  }

  public void Dispose() 
  {
    // nothing here !!!
  } 
}

I am wondering why is the Dispose method always empty? Shouldn't we unsubscribe the event which we subscribe in the Init method?


The lifecycle of an HttpModule is tightly integrated with the lifecycle of an HttpApplication. Instances of HttpModule are generated when the application is started and destroyed when the application is disposed of.

In this case there is no point in unsubscribing from the event because the publisher (HttpApplication) is being disposed of anyway. Of course, in a situation where the publisher wasn't being disposed of, unhooking the event handler would be the right thing to do.


The dispose method won't be empty if you need to instantiate IDisposable objects inside your module.

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

精彩评论

暂无评论...
验证码 换一张
取 消