/// <summary> /// 保存时 对当前配置项进行赋值 /// </summary> /// <param name="item">当前配置项</param> /// <param name="ListOptions">配置项值</param> /// <param name="AfterSave">是否调用保存后方法</param> public void SetValue(ConfigOption item, List <Options> ListOptions, bool AfterSave = true) { if (AfterSave) { //调用保存后处理事件 item.AfterSave(ListOptions); } //获取本地化配置 var localConfigList = ConfigService.GetAllLocalOptions(item.GroupType); var desc = ConfigDescriptionCache.GetTypeDiscription(item.GetType()); Options option = null; foreach (PropertyInfo prop in desc.StaticPropertyInfo) { option = ListOptions.FirstOrDefault(e => e.Key.Equals(prop.Name, StringComparison.OrdinalIgnoreCase)); if (option == null) { //不存在该配置项,则清空当前值 prop.SetValue(null, ConvertScalar(null, prop.PropertyType), null); } else { var localConfig = localConfigList.FirstOrDefault(e => e.Key.Equals(prop.Name, StringComparison.OrdinalIgnoreCase)); string optionValue = option.Value; if (localConfig != null) { optionValue = localConfig.Value; } prop.SetValue(null, ConvertScalar(optionValue, prop.PropertyType), null); } } }
/// <summary> /// 初始化系统参数配置信息 /// </summary> public void Init() { //所有选项值 List <Options> listOption = ConfigService.GetAllOptions(); ConfigDescription desc = null; //代码现有配置项 foreach (ConfigOption item in AllConfig) { //反射读取配置项ConfigTypeAttribute ConfigAttribute 信息 desc = ConfigDescriptionCache.GetTypeDiscription(item.GetType()); //设置当前配置项的GroupType desc.GroupTypePropertyInfo.SetValue(item, ConvertScalar(desc.Group, desc.GroupTypePropertyInfo.PropertyType), null); //每项值信息 List <Options> itemOptions = listOption.Where(e => e.OptionType.Equals(desc.Group, StringComparison.OrdinalIgnoreCase)).ToList(); Options op = null; ConfigAttribute ca = null; foreach (PropertyInfo prop in desc.StaticPropertyInfo) { op = itemOptions.FirstOrDefault(e1 => e1.Key.Equals(prop.Name, StringComparison.OrdinalIgnoreCase)); ca = desc.MemberDict[prop.Name]; if (op == null) { //设置默认值 prop.SetValue(null, ConvertScalar(ca.DefaultValue, prop.PropertyType), null); } else { prop.SetValue(null, ConvertScalar(op.Value, prop.PropertyType), null); } } } }
/// <summary> /// 获取所有配置信息 /// </summary> /// <returns>所有配置信息</returns> public List <OptionViewModel> GetAllOption(string GroupType = "") { //所有选项值 List <Options> listOption = ConfigService.GetAllOptions(GroupType); IEnumerable <Tags> listTags = TagService.GetTags(ConfigHandler); IEnumerable <ConfigOption> listConfigs = AllConfig; if (!string.IsNullOrEmpty(GroupType)) { listConfigs = AllConfig.Where(e => e.GroupType.Equals(GroupType, StringComparison.OrdinalIgnoreCase)); } ConfigDescription desc = null; //分组信息 OptionGroup optionGroup = null; Options op = null; ConfigAttribute ca = null; List <OptionViewModel> result = new List <OptionViewModel>(); OptionViewModel itemOptionViewModel = null; //代码现有配置项 foreach (ConfigOption item in listConfigs) { //反射读取配置项ConfigTypeAttribute ConfigAttribute 信息 desc = ConfigDescriptionCache.GetTypeDiscription(item.GetType()); itemOptionViewModel = new OptionViewModel(); optionGroup = new OptionGroup { GroupType = desc.Group, GroupName = desc.GroupCn, CustomPage = desc.CustomPage }; optionGroup.ImmediateUpdate = desc.ImmediateUpdate; itemOptionViewModel.Group = optionGroup; itemOptionViewModel.FunctionType = desc.FunctionType; itemOptionViewModel.ListOptions = new List <Options>(); //每项值信息 List <Options> itemOptions = listOption.Where(e => e.OptionType.Equals(desc.Group, StringComparison.OrdinalIgnoreCase)).ToList(); foreach (PropertyInfo prop in desc.StaticPropertyInfo) { op = itemOptions.FirstOrDefault(e1 => e1.Key.Equals(prop.Name, StringComparison.OrdinalIgnoreCase)); ca = desc.MemberDict[prop.Name]; if (op == null) { op = new Options { OptionType = desc.Group, OptionName = ca.Name, Key = prop.Name, Value = Convert.ToString(ca.DefaultValue) }; } //必填设置 op.Required = ca.Required; //校验规则 op.ValidateRule = ca.ValidateRule; //悬浮title op.Title = ca.Title; op.Valuetype = Convert.ToInt32(ca.ValueType).ToString(); op.OptionName = ca.Name; op.DataSource = ca.DataSource == null ? null : JsonConvert.DeserializeObject(ca.DataSource); op.FormatDate = ca.FormatDate; itemOptionViewModel.ListOptions.Add(op); itemOptionViewModel.TagList = listTags.Where(e => e.SourceId == itemOptionViewModel.Group.GroupType).ToList(); } result.Add(itemOptionViewModel); } return(result.OrderBy(e => e.Group.GroupType).ToList()); }