public object GetItem(string key, BaseCacheItemCreator creator, params object[] args) { object result = null; ICacheDataConverter converter = GetDataConverter(creator); var distributeKey = GetDistributeKey(creator, key); if (GetCacheInstance(distributeKey, converter, out var cacheObject)) { return(cacheObject); } try { result = creator.Create(key, args); TkDebug.AssertNotNull(result, string.Format(ObjectUtil.SysCulture, "类型为{0}缓存对象创建者没有创建缓存对象,请确认", creator.GetType()), creator); } catch (Exception ex) { TkDebug.ThrowToolkitException(string.Format(ObjectUtil.SysCulture, "类型为{0}缓存对象创建者在创建对象时发生例外,请检查原因", creator.GetType()), ex, creator); } ICacheDependency dependency = CacheUtil.SearchDependency(result); IDistributeCacheDependency distributeDependency = dependency as IDistributeCacheDependency; TkDebug.AssertNotNull(distributeDependency, $"附着的ICacheDependency(类型为{dependency.GetType()})不支持IDistributeCacheDependency", dependency); AddCacheInstance(distributeKey, result, converter, distributeDependency, creator.Attribute.ForceCache); return(result); }
public object GetItem(string key, BaseCacheItemCreator creator, params object[] args) { object result = null; object cacheObject; if (GetCacheInstance(key, out cacheObject)) { return(cacheObject); } try { result = creator.Create(key, args); TkDebug.AssertNotNull(result, string.Format(ObjectUtil.SysCulture, "类型为{0}缓存对象创建者没有创建缓存对象,请确认", creator.GetType()), creator); } catch (Exception ex) { TkDebug.ThrowToolkitException(string.Format(ObjectUtil.SysCulture, "类型为{0}缓存对象创建者在创建对象时发生例外,请检查原因", creator.GetType()), ex, creator); } AddCacheInstance(key, result, CacheUtil.SearchDependency(result), creator.Attribute.ForceCache); return(result); }
internal static ICacheDataConverter GetDataConverter(BaseCacheItemCreator creator) { ICacheDataConverter converter = creator as ICacheDataConverter; TkDebug.AssertNotNull(converter, $"{nameof(creator)}需要支持ICacheDataConverter接口", creator); return(converter); }
public object GetCacheItem(string cacheName, string key, params object[] args) { TkDebug.AssertArgumentNullOrEmpty(cacheName, "cacheName", this); TkDebug.AssertArgumentNullOrEmpty(key, "key", this); ICache cache = GetCache(cacheName); BaseCacheItemCreator creator = PlugInFactoryManager.CreateInstance <BaseCacheItemCreator>( CacheItemCreatorPlugInFactory.REG_NAME, cacheName); TkDebug.AssertNotNull(creator, $"{cacheName}不存在", this); if (cache == null) { ICacheCreator cacheCreator = creator.CacheCreator; if (cacheCreator == null) { cacheCreator = creator.SupportDistributed ? DefaultDistributedCreator : DefaultCreator; } cache = cacheCreator.CreateCache(cacheName); CacheLock.WriteLockAction(() => { if (!fCaches.ContainsKey(cacheName)) { fCaches.Add(cacheName, cache); return(true); } return(false); }); } return(cache.GetItem(creator.TransformCacheKey(key), creator, args)); }
public static BaseCacheItemCreator Create(string creatorName) { TkDebug.AssertArgumentNullOrEmpty(creatorName, "creatorName", null); BaseCacheItemCreator result = PlugInFactoryManager.CreateInstance <BaseCacheItemCreator>( CacheItemCreatorPlugInFactory.REG_NAME, creatorName); return(result); }
public bool ContainsKey(string key, string cacheName) { BaseCacheItemCreator creator = PlugInFactoryManager.CreateInstance <BaseCacheItemCreator>( CacheItemCreatorPlugInFactory.REG_NAME, cacheName); TkDebug.AssertNotNull(creator, $"{cacheName}不存在", this); ICacheDataConverter converter = GetDataConverter(creator); return(GetCacheInstance(key, converter, out _)); }
public static string GetDistributeKey(BaseCacheItemCreator creator, string key) { TkDebug.AssertArgumentNull(creator, nameof(creator), null); TkDebug.AssertArgumentNullOrEmpty(key, nameof(key), null); string regName = creator.Attribute.GetRegName(creator.GetType()); DistributeKey result = new DistributeKey(regName, key); return(result.ToString()); }