Exemple #1
0
        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);
                }
            }
        }