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);
        }
Beispiel #3
0
        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);
        }