private static ConfigType GenerateType(VirtualDataTable table) { CheckAndGetIdMeta(table, out var idMeta); var configType = new ConfigType(table.TableName + Config.GenerateClassSuffix); configType.SetIdField(GetType(idMeta.FieldFullName, idMeta.TypeSpec), idMeta.Description); var rootSplitFields = new Dictionary <string, SplitField>(); var tableConfig = TableConfigs.Get(table.TableName); //先填充xml定义的列 if (tableConfig != null) { foreach (var typeDefine in tableConfig.DefineTypes) { ParseDefineTypes(rootSplitFields, typeDefine, typeDefine.FieldName.Trim()); } } foreach (var meta in table.ColumnMetas.Skip(1)) { var fieldFullName = meta.FieldFullName.Trim(); try { var fieldType = GetType(fieldFullName.Replace(".", ""), meta.TypeSpec); //split field if (fieldFullName.Contains(".")) { ParseSplitField(rootSplitFields, fieldFullName, fieldType, meta.Description); } //normal field else { configType.AddField(fieldType, fieldFullName, meta.Description); } } catch (MakeConfigException e) { throw new MakeConfigException($"在文件{table.File.GetAbsolutePath()}中解析字段{fieldFullName}时遇到错误:{e.Message}"); } } foreach (var kv in rootSplitFields) { var fieldName = kv.Key; var ctx = kv.Value; var virtualType = ctx.Type ?? CreateSplitType(fieldName, ctx); configType.AddField(virtualType, fieldName, ctx.Description); } return(configType); }
/// <summary> /// 初始化配置 /// </summary> public void Init() { var files = Directory.GetFiles(RuntimeContext.Current.TableConfigPath)?.Where(p => p.EndsWith(".json", StringComparison.OrdinalIgnoreCase)); foreach (var file in files) { try { var config = LoadConfig(file); if (config.Enabled) { TableConfigs.Add(config); } } catch (Exception ex) { this.Log("配置文件加载失败", ex); } } }