Как правильно распорядиться 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
?
Ответы
Ответ 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();
}
}