FireOnAppStart() private method

private FireOnAppStart ( HttpContext context ) : System.Web.HttpApplication
context HttpContext
return System.Web.HttpApplication
Example #1
0
        //
        // Multiple-threads might hit this one on startup, and we have
        // to delay-initialize until we have the HttpContext
        //
        internal static HttpApplication GetApplication(HttpContext context)
        {
            HttpApplicationFactory factory = theFactory;
            HttpApplication        app     = null;

            if (factory.app_start_needed)
            {
                if (context == null)
                {
                    return(null);
                }

                factory.InitType(context);
                lock (factory) {
                    if (factory.app_start_needed)
                    {
                        foreach (string dir in HttpApplication.BinDirs)
                        {
                            WatchLocationForRestart(dir, "*.dll");
                        }
                        // Restart if the App_* directories are created...
                        WatchLocationForRestart(".", "App_Code");
                        WatchLocationForRestart(".", "App_Browsers");
                        WatchLocationForRestart(".", "App_GlobalResources");
                        // ...or their contents is changed.
                        WatchLocationForRestart("App_Code", "*", true);
                        WatchLocationForRestart("App_Browsers", "*");
                        WatchLocationForRestart("App_GlobalResources", "*");
                        app = factory.FireOnAppStart(context);
                        factory.app_start_needed = false;
                        return(app);
                    }
                }
            }

            app = (HttpApplication)Interlocked.Exchange(ref factory.next_free, null);
            if (app != null)
            {
                app.RequestCompleted = false;
                return(app);
            }

            lock (factory.available) {
                if (factory.available.Count > 0)
                {
                    app = (HttpApplication)factory.available.Pop();
                    app.RequestCompleted = false;
                    return(app);
                }
            }

            return((HttpApplication)Activator.CreateInstance(factory.app_type, true));
        }