Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

Ответ 2

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