Как правильно избавиться от 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?


person Jakub Šturc    schedule 06.08.2010    source источник


Ответы (2)


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

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

person Matt B    schedule 07.08.2010
comment
Я попытался отменить регистрацию в Dispose и получил InvalidOperationException с сообщением. Обработчики событий могут быть привязаны только к событиям HttpApplication во время инициализации IHttpModule. - person angularsen; 11.10.2012

Метод 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();
  } 
}
person Thomas Langston    schedule 08.02.2017