using Microsoft.Practices.EnterpriseLibrary.Caching; namespace Website.Caching { public class CachingSyndicatedFeedService : CacheBase, ISyndicatedFeedService { private const string CACHE_MANAGER_PREFIX = "SyndicatedFeedService"; private static readonly object __CACHE_LOCK = new object(); private readonly ISyndicatedFeedService service; public CachingSyndicatedFeedService(ISyndicatedFeedService service) : this(service, null) { } public CachingSyndicatedFeedService(ISyndicatedFeedService service, ICacheManager cache) : base(cache, CACHE_MANAGER_PREFIX) { this.service = service; } public FeedItemCollection GetFeedItems(string feedUrl, int count) { var items = this[feedUrl]; if (items == null) { lock (__CACHE_LOCK) { if (this[feedUrl] == null) this[feedUrl] = service.GetFeedItems(feedUrl, count); } items = this[feedUrl]; } return items; } } }