protected virtual void Application_Start(object sender, EventArgs e, HttpApplication application)
        {
            using (var op = SnTrace.Repository.StartOperation("Application_Start. Process: {0}, AppDomain: {1}, ",
                                                              System.Diagnostics.Process.GetCurrentProcess().Id, AppDomain.CurrentDomain.Id))
            {
                var repositoryBuilder = new RepositoryBuilder
                {
                    IsWebContext = true,
                };

                Providers.Instance.PropertyCollector    = new ContextEventPropertyCollector();
                Providers.Instance.CompatibilitySupport = new CompatibilitySupport();

                // use real users in a web environment if not configured
                if (Providers.Instance.AccessProvider is DesktopAccessProvider)
                {
                    repositoryBuilder.UseAccessProvider(new UserAccessProvider());
                }

                BuildRepository(repositoryBuilder);

                Repository.Start(repositoryBuilder);

                RepositoryVersionInfo.CheckComponentVersions();

                StorageContext.L2Cache = new L2CacheImpl();

                RegisterRoutes(RouteTable.Routes, application);
                RepositoryPathProvider.Register();

                op.Successful = true;
            }
        }