/// <exclude />
        public static void ApplicationStartInitialize(bool displayDebugInfo = false)
        {
            ThreadDataManager.InitializeThroughHttpContext();

            if (displayDebugInfo)
            {
                Log.LogVerbose("Global.asax", "--- Web Application Start, {0} Id = {1} ---", DateTime.Now.ToLongTimeString(), AppDomain.CurrentDomain.Id);
            }

            PerformanceCounterFacade.SystemStartupIncrement();

            using (GlobalInitializerFacade.GetPreInitHandlersScope())
            {
                ApplicationStartupFacade.FireConfigureServices(ServiceLocator.ServiceCollection);

                ServiceLocator.BuildServiceProvider();
                ServiceLocator.CreateRequestServicesScope(HttpContext.Current);

                ApplicationStartupFacade.FireBeforeSystemInitialize(ServiceLocator.ServiceProvider);
            }

            TempDirectoryFacade.OnApplicationStart();

            HostnameBindingsFacade.Initialize();

            ApplicationStartupFacade.FireSystemInitialized(ServiceLocator.ServiceProvider);

            ThreadDataManager.FinalizeThroughHttpContext();
        }
        /// <exclude />
        public static void Application_EndRequest(object sender, EventArgs e)
        {
            var context = ((HttpApplication)sender).Context;

            try
            {
                ServiceLocator.DisposeRequestServicesScope(context);

                if (LogRequestDetails && context.Items.Contains("Global.asax timer"))
                {
                    int    startTimer  = (int)context.Items["Global.asax timer"];
                    string requestPath = context.Request.Path;
                    Log.LogVerbose("End request", $"{requestPath} - took {Environment.TickCount - startTimer} ms");
                }
            }
            finally
            {
                ThreadDataManager.FinalizeThroughHttpContext();
            }
        }