using skydiveLogs_api.Domain; using skydiveLogs_api.DomainBusiness.Interfaces; using System; using System.Runtime.Caching; namespace skydiveLogs_api.DomainBusiness { public class CacheService : ICacheService { #region Public Constructors public CacheService() { _memoryCache = MemoryCache.Default; } #endregion Public Constructors #region Private Fields private readonly MemoryCache _memoryCache; #endregion Private Fields #region Public Methods public bool Contains(CacheType type, int userId = 0) { var key = GetKey(userId, type); return _memoryCache.Contains(key.ToString()); } public void Delete(CacheType type, int userId = 0) { var key = GetKey(userId, type); _memoryCache.Remove(key.ToString()); } public T Get(CacheType type, int userId = 0) { var key = GetKey(userId, type); return (T)_memoryCache.Get(key.ToString()); } public void Put(CacheType type, object value, int duration, int userId = 0) { var key = GetKey(userId, type); if (duration <= 0) throw new ArgumentException("Duration cannot be less or equal to zero", "duration"); var policy = new CacheItemPolicy { AbsoluteExpiration = DateTime.Now.AddMilliseconds(duration) }; _memoryCache.Set(key.ToString(), value, policy); } private string GetKey(int userId, CacheType type) { return $"{userId}-{type}"; } #endregion Public Methods } }