private IEnumerable <INavigation> BuildNavigation(INavigation_Root navigationRootItem) { var navigation = new List <Navigation>(); try { Stopwatch sw = Stopwatch.StartNew(); if (navigationRootItem == null) { return(Enumerable.Empty <INavigation>()); } var looseNavigation = new List <Navigation>(); var navigationLinkItems = GetChildLinkItems(navigationRootItem); foreach (var navigationLinkItem in navigationLinkItems) { var navigationChild = CreateNavigation(navigationLinkItem); if (navigationLinkItem is INavigation_Header) { var headerChildItems = GetChildLinkItems(navigationLinkItem).Where(cli => cli.Navigation_Link != null); navigationChild.Children = headerChildItems.Select(CreateNavigation); navigation.Add(navigationChild); } else if (navigationLinkItem.Navigation_Link != null) { looseNavigation.Add(navigationChild); } } if (looseNavigation.Any()) { navigation.Add(new Navigation { Children = looseNavigation }); } StringExtensions.WriteSitecoreLogs("Build Naviugation Method from Sitecore End at :", sw, "SitemapService"); return(navigation); } catch (Exception ex) { Sitecore.Diagnostics.Log.Error("Navigation Error", ex, "ItemNavigationTreeFactory"); return(navigation); } }
public IEnumerable <INavigation> Create(INavigation_Root navigationRootItem) { if (navigationRootItem == null) { return(Enumerable.Empty <INavigation>()); } Stopwatch sw = Stopwatch.StartNew(); StringExtensions.WriteSitecoreLogs("Reached ItemNavigation Create method at :", sw, "ItemSideNavigationTreeFactory"); string cacheKey = $"{nameof(ItemNavigationTreeFactory)}-Create-{navigationRootItem._Id}"; //return _dependencies.CacheProvider.GetFromCache(cacheKey, () => BuildNavigation(navigationRootItem)); lock (_syncRoot) { return(_dependencies.CacheProvider.GetFromCache(cacheKey, () => BuildNavigation(navigationRootItem))); } }