private void InitializeCache() { if (_siteCache == null) { return; } if (_siteCache.Count() > 0) { return; } //Reset Ordered List if (OrderedList.Count > 0) { OrderedList.Clear(); } var deferredList = new List <string>(); //Reset SiteContextFactory so that static variables clear. SiteContextFactory.Reset(); //For Sitecore 7, Need to load Config Provider First. //For Sitecore 8, this is resolved. The difference is that in 8, there's a provider called "sitecore". //If the "sitecore" provider exists, we don't need to make any changes. //If it doesn't, then we're running Sitecore 7 and need to load some config sites first. var sitecoreProvider = SiteManager.Providers["sitecore"]; if (sitecoreProvider == null) { //Sitecore 7 var configProvider = SiteManager.Providers["config"]; foreach (var site in configProvider.GetSites()) { var info = new SiteInfo(site.Properties); //If site has been set to not active, then remove it from Provider. if (!info.IsActive) { continue; } if (string.IsNullOrEmpty(info.HostName) && (string.IsNullOrEmpty(info.VirtualFolder) || info.VirtualFolder.Equals("/")) && string.IsNullOrEmpty(info.StartItem)) { if (!deferredList.Contains(site.Name)) { deferredList.Add(site.Name); } } else { if (!OrderedList.Contains(site.Name)) { OrderedList.Add(site.Name); } } } } //Ininitalize The Cache based off of all Site Providers foreach (var site in from SiteProvider siteProvider in SiteManager.Providers where string.Compare(siteProvider.Name, Name, StringComparison.InvariantCultureIgnoreCase) != 0 from site in siteProvider.GetSites() select site) { //Have to show Sitecore Sites in front of website first. //Ignore Website and any other site that doesn't have a hostname or a Virtual Folder from Config provider. var info = new SiteInfo(site.Properties); //If site has been set to not active, then remove it from Provider. if (!info.IsActive) { continue; } if (string.IsNullOrEmpty(info.HostName) && (string.IsNullOrEmpty(info.VirtualFolder) || info.VirtualFolder.Equals("/")) && string.IsNullOrEmpty(info.StartItem)) { if (!deferredList.Contains(site.Name)) { deferredList.Add(site.Name); } } else { if (!OrderedList.Contains(site.Name)) { OrderedList.Add(site.Name); } } if (!_siteCache.ContainsSite(site)) { _siteCache.AddSite(site); } } if (deferredList.Count > 0) { OrderedList.AddRange(deferredList); } }