コード例 #1
0
        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.");
        }
コード例 #2
0
 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.");
 }
コード例 #3
0
        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)}");
        }
コード例 #4
0
        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);
        }