public static IEnumerable <IPRestriction> Get(int tenant)
        {
            var key          = GetCacheKey(tenant);
            var restrictions = cache.Get(key) as List <IPRestriction>;

            if (restrictions == null)
            {
                var lck = locks.GetOrAdd(key, k => new object());
                lock (lck)
                {
                    restrictions = cache.Get(key) as List <IPRestriction>;
                    if (restrictions == null)
                    {
                        restrictions = IPRestrictionsRepository.Get(tenant).ToList();
                        cache.Insert(key, restrictions, cacheExpiration);
                    }

                    object temp;
                    if (locks.TryGetValue(key, out temp) && (temp == lck))
                    {
                        locks.TryRemove(key, out temp);
                    }
                }
            }
            return(restrictions);
        }
        public static IEnumerable <string> Save(IEnumerable <string> ips, int tenant)
        {
            var restrictions = IPRestrictionsRepository.Save(ips, tenant);

            cache.Insert(GetCacheKey(tenant), IPRestrictionsRepository.Get(tenant), cacheExpiration);

            return(restrictions);
        }
 public IPRestrictionsService(
     IPRestrictionsRepository iPRestrictionsRepository,
     IPRestrictionsServiceCache iPRestrictionsServiceCache)
 {
     IPRestrictionsRepository = iPRestrictionsRepository;
     cache  = iPRestrictionsServiceCache.Cache;
     notify = iPRestrictionsServiceCache.Notify;
 }
        public static IEnumerable <string> Save(IEnumerable <string> ips, int tenant)
        {
            var restrictions = IPRestrictionsRepository.Save(ips, tenant);

            notify.Publish(new IPRestriction {
                TenantId = tenant
            }, CacheNotifyAction.InsertOrUpdate);
            return(restrictions);
        }
        public static IEnumerable <IPRestriction> Get(int tenant)
        {
            var key          = GetCacheKey(tenant);
            var restrictions = cache.Get <List <IPRestriction> >(key);

            if (restrictions == null)
            {
                cache.Insert(key, restrictions = IPRestrictionsRepository.Get(tenant), timeout);
            }
            return(restrictions);
        }