private AsyncCacheData <TKey, TValue> CreateCacheDataInstance(ICacheConfigProfile config, ICacheDataSerializer serializer) { var partitions = StaticCalls.AdjustPartitionCount(config.PartitionCount); if (!config.KeyIsValue) { return(new DictionaryCacheData <TKey, TValue>(partitions, _keyComparer, serializer)); } if (typeof(TKey) == typeof(TValue)) { return(new HashSetCacheData <TKey>(partitions, _keyComparer, serializer) as AsyncCacheData <TKey, TValue>); } throw new AsyncCacheException(AsyncCacheErrorCode.InvalidConfig, $"Config sets {nameof(config.KeyIsValue)} = true. But TKey and TValue not same type."); }
private AsyncCacheData <TKey, TValue> CreateAdditionalCacheDataInstance(ICacheConfigProfile config, ICacheDataSerializer serializer) { if (config.AdType == AdditionalData.None) { return(new EmptyCacheData <TKey, TValue>(0, null)); } if (!config.KeyIsValue) { return(new DictionaryCacheData <TKey, TValue>(1, _keyComparer, serializer)); } if (typeof(TKey) == typeof(TValue)) { return(new HashSetCacheData <TKey>(1, _keyComparer, serializer) as AsyncCacheData <TKey, TValue>); } throw new AsyncCacheException(AsyncCacheErrorCode.InvalidConfig, $"Config sets {nameof(config.KeyIsValue)} = true. But TKey and TValue not same type."); }
private static void Validate(this ICacheConfigProfile config, string typeName) { if (config.AdType == AdditionalData.Database) { config.AdDbProfileKey.ThrowIfNullOrWhiteSpace($"For cache:{typeName}," + $"{nameof(ICacheConfigProfile)}.{nameof(config.AdDbProfileKey)}"); } config.DbProfileKey.ThrowIfNullOrWhiteSpace($"For cache:{typeName}," + $"{nameof(ICacheConfigProfile)}.{nameof(config.DbProfileKey)}"); config.PartitionCount.ThrowIfNegative($"For cache:{typeName}," + $"{nameof(ICacheConfigProfile)}.{nameof(config.PartitionCount)}"); config.ReloadProfileKey.ThrowIfNullOrWhiteSpace($"For cache:{typeName}," + $"{nameof(ICacheConfigProfile)}.{nameof(config.ReloadProfileKey)}"); config.SerializationProfileKey.ThrowIfNullOrWhiteSpace($"For cache:{typeName}," + $"{nameof(ICacheConfigProfile)}.{nameof(config.SerializationProfileKey)}"); }
public InitInput Prepare(ICacheConfigProfile profile) { var result = new InitInput { CacheConfig = profile, TopLevelLocalDirectory = LocalCacheFolder, Logger = Logger, Token = Token }; IDbConfigProfile dbprofile; if (profile.AdType == AdditionalData.Database) { if (DatabaseProfiles.TryGetValue(profile.AdDbProfileKey.SafeTrimLower(), out dbprofile)) { result.AdditionalDataConnectionMgr = new DbConnectionMgr(ConnectionBlocker, ConnectionGenerator, dbprofile.ConnectionType, dbprofile.ConnectionString, Logger); } else { throw new AsyncCacheException(AsyncCacheErrorCode.InvalidConfig, $"For cache (Type:{profile.ConcreteType}), unable to find " + $"Additional data db profile (key:{profile.AdDbProfileKey})"); } } else { result.AdditionalDataConnectionMgr = null; } if (DatabaseProfiles.TryGetValue(profile.DbProfileKey.SafeTrimLower(), out dbprofile)) { result.ActualDataConnectionMgr = new DbConnectionMgr(ConnectionBlocker, ConnectionGenerator, dbprofile.ConnectionType, dbprofile.ConnectionString, Logger); } else { throw new AsyncCacheException(AsyncCacheErrorCode.InvalidConfig, $"For cache (Type:{profile.ConcreteType}), unable to find " + $"actual data db profile (key:{profile.DbProfileKey})"); } IReloadConfigProfile reloadConfig; if (ReloadProfiles.TryGetValue(profile.ReloadProfileKey.SafeTrimLower(), out reloadConfig)) { result.ReloadConfig = reloadConfig; } else { throw new AsyncCacheException(AsyncCacheErrorCode.InvalidConfig, $"For cache (Type:{profile.ConcreteType}), unable to find " + $"reload config profile (key:{profile.ReloadProfileKey})"); } ISerializationConfigProfile serialConfig; if (SerializationProfiles.TryGetValue(profile.SerializationProfileKey.SafeTrimLower(), out serialConfig)) { if (profile.ReloadFromFileFirst && serialConfig.Type == SerializationType.Never) { throw new AsyncCacheException(AsyncCacheErrorCode.InvalidConfig, $"For cache (Type:{profile.ConcreteType}), {nameof(profile.ReloadFromFileFirst)}" + "=true but serialization config profile has " + $"{nameof(serialConfig.Type)}={SerializationType.Never}"); } result.SerializationConfig = serialConfig; } else { throw new AsyncCacheException(AsyncCacheErrorCode.InvalidConfig, $"For cache (Type:{profile.ConcreteType}), unable to find " + $"serialization config profile (key:{profile.SerializationProfileKey})"); } return(result); }