using Microsoft.Extensions.Caching.Memory; 
 | 
using System; 
 | 
using System.Collections.Generic; 
 | 
using System.Linq; 
 | 
using System.Text; 
 | 
using System.Threading.Tasks; 
 | 
  
 | 
namespace WIDESEA_Core.Caches 
 | 
{ 
 | 
    public class MemoryCacheService : ICacheService 
 | 
    { 
 | 
        protected IMemoryCache _cache; 
 | 
        public MemoryCacheService(IMemoryCache cache) 
 | 
        { 
 | 
            _cache = cache; 
 | 
  
 | 
        } 
 | 
  
 | 
        public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false) 
 | 
        { 
 | 
            return AddObject(key, value, expireSeconds, isSliding); 
 | 
        } 
 | 
  
 | 
        public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false) 
 | 
        { 
 | 
            if (expireSeconds != -1) 
 | 
            { 
 | 
                _cache.Set(key, 
 | 
                    value, 
 | 
                    new MemoryCacheEntryOptions() 
 | 
                    .SetSlidingExpiration(new TimeSpan(0, 0, expireSeconds)) 
 | 
                    ); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                _cache.Set(key, value); 
 | 
            } 
 | 
  
 | 
            return true; 
 | 
        } 
 | 
  
 | 
        public void AddOrUpdate(string key, string value, int expireSeconds = -1, bool isSliding = false) 
 | 
        { 
 | 
            if (!string.IsNullOrEmpty(Get(key))) 
 | 
            { 
 | 
                Remove(key); 
 | 
                Add(key, value, expireSeconds, isSliding); 
 | 
            } 
 | 
            else 
 | 
            { 
 | 
                Add(key, value, expireSeconds, isSliding); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public void Dispose() 
 | 
        { 
 | 
            if (_cache != null) 
 | 
                _cache.Dispose(); 
 | 
            GC.SuppressFinalize(this); 
 | 
        } 
 | 
  
 | 
        public bool Exists(string key) 
 | 
        { 
 | 
            if (key == null) 
 | 
            { 
 | 
                throw new ArgumentNullException(nameof(key)); 
 | 
            } 
 | 
            return _cache.Get(key) != null; 
 | 
        } 
 | 
  
 | 
        public T Get<T>(string key) where T : class 
 | 
        { 
 | 
            if (key == null) 
 | 
            { 
 | 
                throw new ArgumentNullException(nameof(key)); 
 | 
            } 
 | 
            return _cache.Get(key) as T; 
 | 
        } 
 | 
  
 | 
        public string Get(string key) 
 | 
        { 
 | 
            try 
 | 
            { 
 | 
                return _cache.Get(key)?.ToString(); 
 | 
            } 
 | 
            catch 
 | 
            { 
 | 
                return string.Empty; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public bool Remove(string key) 
 | 
        { 
 | 
            if (key == null) 
 | 
            { 
 | 
                throw new ArgumentNullException(nameof(key)); 
 | 
            } 
 | 
            _cache.Remove(key); 
 | 
  
 | 
            return !Exists(key); 
 | 
        } 
 | 
  
 | 
        public void Remove(IEnumerable<string> keys) 
 | 
        { 
 | 
            if (keys == null) 
 | 
            { 
 | 
                throw new ArgumentNullException(nameof(keys)); 
 | 
            } 
 | 
  
 | 
            keys.ToList().ForEach(item => _cache.Remove(item)); 
 | 
        } 
 | 
    } 
 | 
} 
 |