How to dispose IHttpModule correctly?
Asked Answered
E

2

33

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?

Empathy answered 6/8, 2010 at 13:55 Comment(0)
W
31

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.

Windsucking answered 7/8, 2010 at 11:16 Comment(1)
I tried unregistering on Dispose and got InvalidOperationException with the message "Event handlers can only be bound to HttpApplication events during IHttpModule initialization."Isomer
T
8

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();
  } 
}
Torres answered 8/2, 2017 at 20:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.