Ejemplo n.º 1
0
        /// <summary>
        /// 生成代码
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="tables"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static String[] Render(String tableName, List<IDataTable> tables, XConfig config)
        {
            if (tables == null || tables.Count < 1) return null;

            var table = tables.Find(e => e.Name.EqualIgnoreCase(tableName));
            if (tableName == null) return null;

            var data = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
            data["Config"] = config;
            data["Tables"] = tables;
            data["Table"] = table;

            String tempName = config.GetTemplateName();
            if(!_CompileTemplates.ContainsKey(tempName) || _CompileTemplates[tempName] == null)
            {
                //--等待系统异步编译的结果
                WaitForAsyncCompile();
                CompileTemplate(config);
            }
            Template tt = _CompileTemplates[tempName];

            List<String> rs = new List<string>();
            foreach (var item in tt.Templates)
            {
                if (item.Included) continue;
                String content = tt.Render(item.Name, data);
                rs.Add(content);
            }

            return rs.ToArray();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 生成代码
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="tables"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static String[] Render(String tableName, List <IDataTable> tables, XConfig config)
        {
            if (tables == null || tables.Count < 1)
            {
                return(null);
            }

            var table = tables.Find(e => e.Name.EqualIgnoreCase(tableName));

            if (tableName == null)
            {
                return(null);
            }

            var data = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);

            data["Config"] = config;
            data["Tables"] = tables;
            data["Table"]  = table;

            String tempName = config.GetTemplateName();

            if (!_CompileTemplates.ContainsKey(tempName) || _CompileTemplates[tempName] == null)
            {
                //--等待系统异步编译的结果
                WaitForAsyncCompile();
                CompileTemplate(config);
            }
            Template tt = _CompileTemplates[tempName];

            List <String> rs = new List <string>();

            foreach (var item in tt.Templates)
            {
                if (item.Included)
                {
                    continue;
                }
                String content = tt.Render(item.Name, data);
                rs.Add(content);
            }

            return(rs.ToArray());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 编译模版
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static Template CompileTemplate(XConfig config)
        {
            Dictionary <string, string> templates = new Dictionary <string, string>();
            String tempName = config.TemplateName;

            // 系统模版
            foreach (var item in Templates)
            {
                var    key  = item.Key;
                String name = key.Substring(0, key.IndexOf("."));
                if (name != tempName)
                {
                    continue;
                }

                String content = item.Value;

                // 添加文件头
                if (config.UseHeadTemplate && !String.IsNullOrEmpty(config.HeadTemplate) && key.EndsWith(".cs", StringComparison.OrdinalIgnoreCase))
                {
                    content = config.HeadTemplate + content;
                }

                templates.Add(key.Substring(name.Length + 1), content);
            }

            Template tt = Template.Create(templates);

            if (tempName.StartsWith("*"))
            {
                tempName = tempName.Substring(1);
            }
            tt.AssemblyName = tempName;

            // 编译模版。这里至少要处理,只有经过了处理,才知道模版项是不是被包含的
            tt.Compile();

            lock (_CompileTemplates)
            {
                _CompileTemplates[config.GetTemplateName()] = tt;
            }

            return(tt);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 编译模版
        /// </summary>
        /// <param name="config"></param>
        /// <returns></returns>
        public static Template CompileTemplate(XConfig config)
        {
            Dictionary<string, string> templates = new Dictionary<string, string>();
            String tempName = config.TemplateName;

            // 系统模版
            foreach (var item in Templates)
            {
                var key = item.Key;
                String name = key.Substring(0, key.IndexOf("."));
                if (name != tempName) continue;

                String content = item.Value;

                // 添加文件头
                if (config.UseHeadTemplate && !String.IsNullOrEmpty(config.HeadTemplate) && key.EndsWith(".cs", StringComparison.OrdinalIgnoreCase))
                    content = config.HeadTemplate + content;

                templates.Add(key.Substring(name.Length + 1), content);
            }

            Template tt = Template.Create(templates);
            if (tempName.StartsWith("*")) tempName = tempName.Substring(1);
            tt.AssemblyName = tempName;

            // 编译模版。这里至少要处理,只有经过了处理,才知道模版项是不是被包含的
            tt.Compile();

            lock (_CompileTemplates)
            {
                _CompileTemplates[config.GetTemplateName()] = tt;
            }

            return tt;
        }