/// <summary> /// 远程缓存容器,提供了相关的基本操作 /// </summary> /// <param name="category">分类名称</param> /// <param name="proxy">远程缓存代理器</param> /// <exception cref="ArgumentNullException">参数不空为能</exception> public RemoteCacheContainer(string category, IRemoteCacheProxy <K, V> proxy) { if (string.IsNullOrEmpty(category)) { throw new ArgumentNullException(nameof(category)); } if (proxy == null) { throw new ArgumentNullException(nameof(proxy)); } _innerContainer = new CacheContainer <K, V>(category); _innerContainer.CacheExpired += CacheExpired; _proxy = proxy; _proxy.LocalContainer = _innerContainer; }
/// <summary> /// 租借一个新的远程缓存容器 /// </summary> /// <typeparam name="K">缓存key类型</typeparam> /// <typeparam name="V">缓存对象类型</typeparam> /// <param name="category">分类名称</param> /// <param name="proxy">远程缓存代理器</param> /// <returns>返回远程缓存容器</returns> /// <exception cref="ArgumentNullException">参数不能为空</exception> public ICacheContainer <K, V> Rent <K, V>(string category, IRemoteCacheProxy <K, V> proxy) { if (string.IsNullOrEmpty(category)) { throw new ArgumentNullException(nameof(category)); } if (proxy == null) { throw new ArgumentNullException("proxy"); } lock (_lockObj) { //already has this container. if (_containers.ContainsKey(category)) { return(null); } IRemoteCacheContainer <K, V> container = new RemoteCacheContainer <K, V>(category, proxy); _containers.Add(category, container); return(container); } }