public static List <BlogLinkItem> GetBlogLinksWithPostCounts(AgilityContentItem blogConfig, IAgilityContentRepository <AgilityContentItem> postsRepo, IAgilityContentRepository <AgilityContentItem> blogLinksRepo, List <DateTime> blogLinksDates, bool getCounts) { //blog links can be either Categories or Tags var cacheKey = string.Format("Agility.Components.Blog.GetBlogLinksWithPostCounts_{0}_{1}_{2}_{3}", blogConfig.ContentID, postsRepo.ContentReferenceName, (blogLinksRepo != null ? blogLinksRepo.ContentReferenceName : ""), (blogLinksDates != null ? blogLinksDates.Count : 0)); List <BlogLinkItem> links = HttpContext.Current.Cache[cacheKey] as List <BlogLinkItem>; if (links != null) { return(links); } lock (_getBlogLinksCountsCacheLock) { if (links != null) { return(links); } if (blogLinksDates != null && blogLinksDates.Any()) { links = blogLinksDates.Select(i => new BlogLinkItem() { Title = i.ToString("MMMM yyyy"), Url = string.Format("{0}?month={1}", BlogContext.GetBlogRootPath(blogConfig), i.ToString("MM-yyyy")), PostCount = (getCounts ? BlogUtils.GetPostCountByDate(postsRepo, i) : 0), }).ToList(); } else if (blogLinksRepo != null) { var items = blogLinksRepo.Items(); links = items.Select(i => new BlogLinkItem() { Title = i["Title"] as string, Url = i.BlogDynamicUrl(blogConfig, null), PostCount = (getCounts ? BlogUtils.GetPostCount(postsRepo, i) : 0), ImageUrl = GetBlogPostListingImageUrl(i), ImageLabel = GetBlogPostListingImageTitle(i), Excerpt = "" }).ToList(); } HttpContext.Current.Cache.Add(cacheKey, links, null, DateTime.Now.AddHours(2), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null); return(links); } }