Как правильно распоряжаться IHttpModule?

все реализации 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 ответов


жизненный цикл HttpModule тесно интегрирован с жизненным циклом HttpApplication. Экземпляры HttpModule создаются при запуске приложения и уничтожаются при удалении приложения.

в этом случае нет смысла отказываться от подписки на событие, потому что издатель (HttpApplication) все равно удаляется. Конечно, в ситуации, когда издатель не удалялся, отсоединение обработчика событий было бы правильным надо что-то делать.


метод dispose не будет пустым, если вам нужно создать экземпляр объектов IDisposable внутри вашего модуля.

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