Quantcast
Viewing all articles
Browse latest Browse all 8156

MemoryCache custom ChangeMonitor

I couldn't find any good examples of how to use ChangeMonitor classes.

Here's my problem: I'm caching a few method of my Repository, building a key to uniquely identify the cached data. The cached data has a expiration time, but the data can change before the expiration takes place.

Take a look:

 public class CachedUserRepository : CachedRepositoryBase, IUserRepository
    {
        private readonly CacheKeyBuilder keyBuilder;
        private readonly IUserRepository repository;
        private readonly CacheManager cacheManager;

        public CachedUserRepository(IUserRepository repository)
        {
            this.repository = repository;
            keyBuilder = new CacheKeyBuilder();
            cacheManager = CacheManager.Instance;
        }

        public IEnumerable<Content> GetWatchList(User user, Size cover = null, Pagination pagination = null)
        {
            var key = keyBuilder.Create(GetType()).With(user, cover, pagination).Build();
            var entry = cacheManager.Get(key);
            if (entry != null)
                return (IEnumerable<Content>)entry;

            var result = repository.GetWatchList(user, cover, pagination);
            cacheManager.Add(user, key, result, Duration(CacheType.VeryLow));

            return result;
        }

I'm caching the WatchList of the users. It's a web app and there could be several users, so I'm building a key for each one of them. That's fine. However, my repository has the following method as well:

public void AddBookmark(User user, Identifier contentId)
        {
            repository.AddBookmark(user, contentId);
        }

When the following method is called, I need to clear any cached data of the given user (method's parameter). How to accomplish that? ChangeMonitor is the way? And if it is, how can I write the code for it?


Take a look at WPF FlashMessage
About.me


Viewing all articles
Browse latest Browse all 8156

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>