Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
public class HomeHandler : IAsyncRequestHandler<Home, List<Album>>
private readonly MusicStoreContext _dbContext;
private readonly IMemoryCache _cache;
private readonly IOptions<AppSettings> _options;
public HomeHandler(MusicStoreContext dbContext, IMemoryCache cache, IOptions<AppSettings> options)
_dbContext = dbContext;
_cache = cache;
_options = options;
public async Task<List<Album>> Handle(Home message)
// Get most popular albums
var cacheKey = "topselling";
List<Album> albums;
if (!_cache.TryGetValue(cacheKey, out albums))
albums = await _dbContext.Albums
.OrderByDescending(a => a.OrderDetails.Count)
if (albums != null && albums.Count > 0)
if (_options.Value.CacheDbResults)
// Refresh it every 10 minutes.
// Let this be the last item to be removed by cache if cache GC kicks in.
new MemoryCacheEntryOptions()
return albums;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment