public static TItem GetOrCreate <TItem>(this IMemoryCacheManager cache, object key, Func <ICacheEntry, TItem> factory) { if (!cache.TryGetValue(key, out var result)) { var entry = cache.CreateEntry(key); result = factory(entry); entry.SetValue(result); entry.Dispose(); } return((TItem)result); }
public static async Task <TItem> GetOrCreateAsync <TItem>(this IMemoryCacheManager cache, object key, Func <ICacheEntry, Task <TItem> > factory) { if (!cache.TryGetValue(key, out object result)) { var entry = cache.CreateEntry(key); result = await factory(entry); entry.SetValue(result); entry.Dispose(); } return((TItem)result); }
public async Task <IEnumerable <CategoryDto> > Handle(GetCategoriesQuery request, CancellationToken cancellationToken) { if (!_memoryCacheManager.TryGetValue(nameof(GetCategoriesQuery), out IEnumerable <CategoryDto> categoryDtos)) { var categories = await _unitOfWork.Categories.GetAllAsync(); categoryDtos = categories.Select(c => new CategoryDto { Id = c.Id, Name = c.Name }); _memoryCacheManager.Set(nameof(GetCategoriesQuery), categoryDtos); } return(categoryDtos); }