2010-09-11 2 views
2

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

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

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

+0

Что не так с global.asax? – spender

+0

Global.asax не мой. Другими словами, мне нужно взломать трубопровод снаружи. Мне интересно, правильно ли создается пользовательский HTTP-модуль («IHttpModule») и регистрация обработчика события «HttpApplication.PreRequestHandlerExecute» - т. Е. Доступен ли экземпляр «Page» уже через «HttpContext». –

ответ

3

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

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

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

EDIT:

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

+0

Да, создание настраиваемого HTTP-модуля кажется правильным. Когда я первоначально изучал документацию, я не видел ее четко. Благодарю. –

0

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