Esempio n. 1
0
 public T GetConfigItemValue <T>(string[] pathItemNames, T defVal, ConfigItemValueUpdateCallback callback)
 {
     return((T)InternalGetConfigItemValue(null, pathItemNames, typeof(T), defVal, callback));
 }
Esempio n. 2
0
 public T GetConfigItemValue <T>(string cateName, string subcateName, string itemName, T defVal, ConfigItemValueUpdateCallback callback)
 {
     return((T)InternalGetConfigItemValue(null, new[] { cateName, subcateName, itemName }, typeof(T), defVal, callback));
 }
Esempio n. 3
0
 public T GetConfigItemValue <T>(bool global, string[] pathItemNames, T defVal, ConfigItemValueUpdateCallback callback)
 {
     return((T)InternalGetConfigItemValue(global ? null : _appName, pathItemNames, typeof(T), defVal, callback));
 }
Esempio n. 4
0
 private object InternalGetConfigItemValue(string appName, string[] pathItemNames, Type valType, object defVal, ConfigItemValueUpdateCallback configItemValueUpdateCallback)
 {
     try
     {
         ConfigItem item = InternalGetConfigItem(appName, pathItemNames);
         if (item != null && item.ObjectValue != null)
         {
             return(item.ObjectValue);
         }
         if (_tryCreateConfigItemIfNotExists)
         {
             item = EnsureConfigItemAdded(appName, pathItemNames, valType, defVal);
         }
         if (item == null)
         {
             LocalLoggingService.Warning("配置项为NULL,valType:{0},appName:{1},pathItemNames:{2}", valType, appName, string.Join(",", pathItemNames.ToArray()));
             return(defVal);
         }
         object objectValue = GetTypeConfigItemValue(item, valType, ConfigHelper.IsUnderlyingType(valType) ? defVal : Activator.CreateInstance(valType), new List <string>(pathItemNames));
         _locker.EnterUpgradeableReadLock();
         try
         {
             if (!_configCache.TryGetValue(item.Id, out item))
             {
                 return(objectValue);
             }
             _locker.EnterWriteLock();
             try
             {
                 _configCache[item.Id].ObjectValue = objectValue;
             }
             finally
             {
                 _locker.ExitWriteLock();
             }
         }
         finally
         {
             _locker.ExitUpgradeableReadLock();
         }
         if (configItemValueUpdateCallback != null)
         {
             _locker.EnterUpgradeableReadLock();
             try
             {
                 string id = ConfigHelper.GenerateConfigItemId(appName, pathItemNames);
                 if (!_dicConfigItemValueUpdateCallback.ContainsKey(id))
                 {
                     _locker.EnterWriteLock();
                     try
                     {
                         _dicConfigItemValueUpdateCallback[id] = configItemValueUpdateCallback;
                     }
                     finally
                     {
                         _locker.ExitWriteLock();
                     }
                 }
             }
             finally
             {
                 _locker.ExitUpgradeableReadLock();
             }
         }
         return(objectValue);
     }
     catch (Exception ex)
     {
         LocalLoggingService.Error("获取配置项值出错,异常信息:{0}", ex);
         return(defVal);
     }
 }
Esempio n. 5
0
 public T GetConfigItemValue <T>(bool global, string cateName, string itemName, T defVal, ConfigItemValueUpdateCallback callback)
 {
     return((T)InternalGetConfigItemValue(global ? null : _appName, new[] { cateName, itemName }, typeof(T), defVal, callback));
 }