using GameData.Repository; using GameModel; using GameModel.Contract; using Microsoft.Extensions.Caching.Memory; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Caching; using System.Text; using System.Threading.Tasks; namespace GameData.CacheProxy { /// /// cache for repository data, implemented as proxy not as decorator https://www.youtube.com/watch?v=nmAE-JzNSEw /// public class CachedExpenseRepository : IExpenseRepository { IMemoryCache _cache; ExpenseRepository _repository; public CachedExpenseRepository(ExpenseRepository repository, IMemoryCache cache) { _repository = repository; _cache = cache; } public Task Delete(IEnumerable enumerable) { return _repository.Delete(enumerable); } public Task> GetAll() { return _cache.GetOrCreateAsync("allexpenses", factory => _repository.GetAll()); } public Task Save(PlayerExpense data) { return _repository.Save(data); } } }