internal static void AttachEvents(HttpApplication app)
{
HttpApplicationFactory factory = theFactory;
Hashtable possibleEvents = factory.GetApplicationTypeEvents(app);
foreach (string key in possibleEvents.Keys)
{
int pos = key.IndexOf('_');
string moduleName = key.Substring(0, pos);
object target;
if (moduleName == "Application")
{
target = app;
}
else
{
target = app.Modules [moduleName];
if (target == null)
{
continue;
}
}
string eventName = key.Substring(pos + 1);
EventInfo evt = target.GetType().GetEvent(eventName);
if (evt == null)
{
continue;
}
string usualName = moduleName + "_" + eventName;
object methodData = possibleEvents [usualName];
if (methodData == null)
{
continue;
}
if (eventName == "End" && moduleName == "Session")
{
Interlocked.CompareExchange(ref factory.session_end, methodData, null);
continue;
}
if (methodData is MethodInfo)
{
factory.AddHandler(evt, target, app, (MethodInfo)methodData);
continue;
}
ArrayList list = (ArrayList)methodData;
foreach (MethodInfo method in list)
{
factory.AddHandler(evt, target, app, method);
}
}
}