/// <summary> /// 设置配置类的映射关系 /// </summary> /// <param name="configClassType">配置类的类型</param> /// <param name="configPropertyInfo">配置属性的信息</param> /// <param name="disconfAttribute">配置特性</param> private static void SetConfigClassMapper(Type configClassType, PropertyInfo configPropertyInfo, DisconfAttribute disconfAttribute) { if (disconfAttribute == null) { throw new ArgumentNullException("disconfAttribute"); } if (string.IsNullOrWhiteSpace(disconfAttribute.Name)) { throw new ArgumentNullException("disconfAttribute.Name"); } if (!ConfigStorage.ContainsKey(disconfAttribute.Name)) { throw new Exception(string.Format("配置中心未配置名为:{0}的配置项!", disconfAttribute.Name)); } //将一些常用的配置文件的扩展名匹配到指定的数据转换器 Type dataConverterType = disconfAttribute.DataConverterType; if (dataConverterType == null) { if (disconfAttribute.Name.EndsWith(".json")) { dataConverterType = typeof(JsonDataConverter); } else if (disconfAttribute.Name.EndsWith(".config")) { dataConverterType = typeof(AppSettingsDataConverter); } else if (disconfAttribute.Name.EndsWith(".properties")) { dataConverterType = typeof(PropertiesDataConverter); } else { dataConverterType = typeof(DefalutDataConverter); } } //根据配置类的类型或配置属性的类型注册对应的数据转换器 IDataConverter dataConverter = (IDataConverter)Activator.CreateInstance(dataConverterType, true); Type registerType = configPropertyInfo == null ? configClassType : configPropertyInfo.PropertyType; DataConverterManager.RegisterDataConverter(registerType, dataConverter); ConfigStorageItem item = ConfigStorage[disconfAttribute.Name]; ConfigClassMapper mapper = new ConfigClassMapper { //DisconfNodeType = disconfAttribute.DisconfNodeType, ConfigPropertyInfo = configPropertyInfo, ConfigClassType = configClassType }; item.ConfigClassMapper = mapper; item.RefreshConfigObject(); if (disconfAttribute.CallbackType != null) { ICallback callback = (ICallback)Activator.CreateInstance(disconfAttribute.CallbackType, true); ConfigCallbackManager.RegisterCallback(disconfAttribute.Name, callback); item.ConfigClassMapper.ConfigNodeName = disconfAttribute.Name; } ConfigStorage[item.Name] = item; }
public static T GetConfigClass <T>() { return((T)ConfigClassMapper.GetConfigClassInstance(typeof(T))); }