Как правильно распорядиться IHttpModule? - PullRequest
25 голосов
/ 06 августа 2010

Вся реализация 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 ]

24 голосов
/ 07 августа 2010

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

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

3 голосов
/ 08 февраля 2017

Метод 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();
  } 
}
...