Создание объекта Intercept Page для подключения событий

Я ищу способ перехватить конвейер обработки ASP.NET таким образом, чтобы иметь возможность регистрировать обработчики событий для всех событий в классе Page. Причина в том, что мне нужно поддерживать связанный с сеансом экземпляр компонента, который должен быть уведомлен обо всех важных событиях Page, начиная с OnPreInit.

В приложении есть произвольное количество Page потомков, которые не находятся под моим контролем. Следовательно, я не могу использовать такой подход, как использование одного пользовательского потомка, который будет уведомлять компонент, привязанный к сеансу, в качестве базового класса для всех страниц в веб-приложении.

Я не думаю, что создание пользовательской реализации IHttpHandler или IHttpModule решит проблему. Также обратите внимание, что я не могу создать собственного потомка HttpApplication.


person Ondrej Tucny    schedule 11.09.2010    source источник
comment
Что не так с global.asax?   -  person spender    schedule 12.09.2010
comment
Global.asax не принадлежит мне. Другими словами, мне нужно взломать конвейер извне. Мне интересно, является ли создание пользовательского HTTP-модуля (IHttpModule) и регистрация обработчика для события HttpApplication.PreRequestHandlerExecute правильным путем, то есть доступен ли экземпляр Page через HttpContext.   -  person Ondrej Tucny    schedule 12.09.2010


Ответы (2)


Это не будет элегантным процессом, чтобы сделать то, на что вы смотрите, особенно если вам нужно обрабатывать события нескольких страниц, но теоретически вполне возможно из Global.asax настроить обработчики, которые вам нужны для каждого и каждую страницу.

Хитрость здесь заключается в том, чтобы добавить свой код в global.asax в методе PreRequestHandlerExecute, отсюда вы можете получить доступ к объекту HttpApplication, оттуда получить доступ к странице, а затем зарегистрировать свои события. Этот процесс необходим, так как для каждой обрабатываемой страницы создается новый экземпляр страницы.

Теперь другие варианты, как вы знаете, гораздо более элегантны, но это должно привести к тому, что вам нужно. Один полезный учебник, который я нашел, хотя вокруг Themeing показывает вам весь процесс здесь .

ИЗМЕНИТЬ:

Увидев ваш комментарий, да, вы можете просто сделать то, что я говорю выше, в пользовательском HttpModule. В статье, на которую я ссылаюсь, даже показан этот процесс :)

person Mitchel Sellers    schedule 11.09.2010
comment
Да, создание собственного HTTP-модуля кажется правильным подходом. При первоначальном изучении документации я не видел этого ясно. Спасибо. - person Ondrej Tucny; 12.09.2010

Не зная больше о том, чего вы пытаетесь достичь, это действительно звучит так, как будто вы действительно хотите создать http-модуль или обработчик. Возможно, вы захотите взглянуть на этот вопрос

person Conrad Frix    schedule 11.09.2010