2010-08-06 3 views
24

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

ответ

23

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

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

+4

Я попробовал на Dispose регистрацией и получил InvalidOperationException с сообщением «обработчики событий могут быть связаны только с HttpApplication событий во время инициализации IHttpModule.» – angularsen

3

Метод удаления не будет пустым, если вам нужно создать объекты 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(); 
    } 
}