/// <summary> /// 执行解析模板内容 /// </summary> /// <param name="instance">包含标签方法的类的实例</param> /// <param name="html"></param> /// <returns></returns> private static string Execute(ITemplateClass instance, string html) { return(FnRegex.Replace(html, m => { // 方法名称 String fnName = m.Groups[1].Value; // 获得参数 MatchCollection paramMatches = paramRegex.Matches(m.Groups[2].Value); object[] paramArray = new object[paramMatches.Count]; // 则给参数数组赋值 for (int i = 0; i < paramMatches.Count; i++) { // 数字参数 string intParamValue = paramMatches[i].Groups[2].Value; if (intParamValue != String.Empty) { paramArray[i] = intParamValue; } else { paramArray[i] = paramMatches[i].Groups[1].Value; } } // 解析模板数据 var s = instance.Execute(fnName, paramArray); return s ?? m.Value; })); }
/// <summary> /// 创建模板引擎实例 /// </summary> /// <param name="classInstance"></param> public MicroTemplateEngine(ITemplateClass classInstance) { if (classInstance != null) { this._classInstance = classInstance; this._classInstance.UpdateEngine(this); } }
private void CreateTemplateClass(ITemplateClass t) { if (t.serialized_tree != null) { TypeBuilder tb = mb.DefineType(cur_unit + ".%" + t.name, TypeAttributes.Public, TypeFactory.ObjectType); types.Add(tb); CustomAttributeBuilder cust_bldr = new CustomAttributeBuilder(this.TemplateClassAttributeConstructor, new object[1] { t.serialized_tree }); tb.SetCustomAttribute(cust_bldr); } }