public async Task <IEnumerable <HatResource> > GetHatsAsync() { // Note: In the real world, we'd use a caching interface that supports GetOrAddAsync<T> for atomicity const string region = nameof(CachingHatService) + "|" + nameof(GetHatsAsync); var key = region; var cached = await _cache.GetStringAsync(key); IEnumerable <HatResource> result; if (cached != null) { _logger.LogInformation("Cached hats found"); result = JsonConvert.DeserializeObject <List <HatResource> >(cached); } else { _logger.LogInformation("Cached hats not found, retrieving from data store"); result = await _dataLayer.GetHatsAsync(); await _cache.SetStringAsync(key, JsonConvert.SerializeObject(result)); } return(result.Select(_mapper.Map <HatResource>)); }
public async Task <IEnumerable <HatResource> > Get([FromServices] IHatService service) { _logger.LogInformation("Getting all hats"); return(await service.GetHatsAsync()); }