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