Прехващане на създаването на обект на страница за свързване на събития

Търся начин да прихвана тръбопровода за обработка на 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