static private int _appMaxFreePublicInstances = 32;\r
\r
private HttpApplicationState _state;\r
- Hashtable appTypeEventHandlers;\r
static Hashtable appEventNames;\r
\r
static IHttpHandler custApplication;\r
static HttpApplicationFactory ()\r
{\r
appEventNames = new Hashtable ();\r
- appEventNames.Add ("Application_Start", null);\r
- appEventNames.Add ("Application_End", null);\r
appEventNames.Add ("Application_BeginRequest", null);\r
appEventNames.Add ("Application_AuthenticateRequest", null);\r
appEventNames.Add ("Application_AuthorizeRequest", null);\r
appEventNames.Add ("Application_PreSendRequestContent", null);\r
appEventNames.Add ("Application_Disposed", null);\r
appEventNames.Add ("Application_Error", null);\r
- appEventNames.Add ("Session_Start", null);\r
- appEventNames.Add ("Session_End", null);\r
}\r
\r
public HttpApplicationFactory() {\r
_appType = typeof (System.Web.HttpApplication);\r
_state = new HttpApplicationState ();\r
}\r
-\r
- GetApplicationTypeEvents ();\r
}\r
\r
- private bool IsEventHandler (MethodInfo m)\r
+ static bool IsEventHandler (MethodInfo m)\r
{\r
if (m.ReturnType != typeof (void))\r
return false;\r
return appEventNames.ContainsKey (m.Name);\r
}\r
\r
- void AddEvent (MethodInfo method)\r
+ static void AddEvent (MethodInfo method, Hashtable appTypeEventHandlers)\r
{\r
string name = method.Name;\r
ArrayList list;\r
list.Add (method);\r
}\r
\r
- private void GetApplicationTypeEvents ()\r
+ static Hashtable GetApplicationTypeEvents (HttpApplication app)\r
{\r
- appTypeEventHandlers = new Hashtable ();\r
+ Type appType = app.GetType ();\r
+ Hashtable appTypeEventHandlers = new Hashtable ();\r
ArrayList evtMethods = new ArrayList ();\r
BindingFlags flags = BindingFlags.Public |\r
BindingFlags.NonPublic | \r
BindingFlags.Instance |\r
BindingFlags.Static;\r
\r
- MethodInfo [] methods = _appType.GetMethods (flags);\r
+ MethodInfo [] methods = appType.GetMethods (flags);\r
foreach (MethodInfo m in methods) {\r
if (IsEventHandler (m))\r
- AddEvent (m);\r
+ AddEvent (m, appTypeEventHandlers);\r
}\r
\r
- Type baseType = _appType.BaseType;\r
+ Type baseType = appType.BaseType;\r
if (baseType == typeof (HttpApplication))\r
- return;\r
+ return appTypeEventHandlers;\r
\r
flags = BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance;\r
\r
- methods = _appType.GetMethods (flags);\r
+ methods = appType.GetMethods (flags);\r
foreach (MethodInfo m in methods) {\r
if (IsEventHandler (m))\r
- AddEvent (m);\r
+ AddEvent (m, appTypeEventHandlers);\r
}\r
+\r
+ return appTypeEventHandlers;\r
}\r
\r
void FireEvents (string method_name, object state_context, object [] args)\r
{\r
- //TODO: anything to do with the context or state?\r
- ArrayList methods = appTypeEventHandlers [method_name] as ArrayList;\r
+ /*\r
if (methods == null || methods.Count == 0)\r
return;\r
\r
foreach (MethodInfo method in methods)\r
method.Invoke (this, args);\r
+ */\r
}\r
\r
void FireOnAppStart (HttpContext context)\r
{\r
- FireEvents ("Application_Start", context, new object [] {this, EventArgs.Empty});\r
+ FireEvents ("Application_OnStart", context, new object [] {this, EventArgs.Empty});\r
}\r
\r
void FireOnAppEnd ()\r
{\r
- FireEvents ("Application_End", null, new object [] {this, EventArgs.Empty});\r
+ FireEvents ("Application_OnEnd", null, new object [] {this, EventArgs.Empty});\r
}\r
\r
void FireOnSessionStart (HttpSessionState state, object source, EventArgs args)\r
{\r
- FireEvents ("Session_Start", state, new object [] {source, args});\r
+ FireEvents ("Session_OnStart", state, new object [] {source, args});\r
}\r
\r
void FireOnSessionEnd (HttpSessionState state, object source, EventArgs args)\r
{\r
- FireEvents ("Session_End", state, new object [] {source, args});\r
+ FireEvents ("Session_OnEnd", state, new object [] {source, args});\r
}\r
\r
private void InitializeFactory(HttpContext context) {\r
s_Factory.RecyclePublicInstance(app);\r
}\r
\r
- void AttachEvents (HttpApplication app)\r
+ internal static void AttachEvents (HttpApplication app)\r
{\r
+ Type appType = app.GetType ();\r
+ Hashtable appTypeEventHandlers = GetApplicationTypeEvents (app);\r
foreach (string key in appTypeEventHandlers.Keys) {\r
- if (key == "Application_Start" || key == "Application_End" ||\r
- key == "Sesssion_Start" || key == "Session_End")\r
+ if (key == "Application_OnStart" || key == "Application_OnEnd" ||\r
+ key == "Session_OnStart" || key == "Session_OnEnd")\r
continue;\r
\r
int pos = key.IndexOf ('_');\r
if (pos == -1 || key.Length <= pos + 1)\r
continue;\r
\r
- EventInfo evt = _appType.GetEvent (key.Substring (pos + 1));\r
+ EventInfo evt = appType.GetEvent (key.Substring (pos + 1));\r
if (evt == null)\r
continue;\r
\r
// Create non-public object\r
app = (HttpApplication) HttpRuntime.CreateInternalObject(_appType);\r
\r
- AttachEvents (app);\r
app.Startup(context, HttpApplicationFactory.ApplicationState);\r
}\r
\r