ST通过实现IStringTemplateErrorListener接口的类型来进行错误处理,它仅包括2个方法定义(错误与警告):
public interface IStringTemplateErrorListener { void Error(string msg, Exception e); void Warning(string msg); }
通过实现此接口,可以自定义错误的处理,如输出到文件(ST默认的错误处理都是输出到控制台):
public class MyErrorListener : IStringTemplateErrorListener { public void Error(string message, Exception e) { WriteToFile("Error:" + message); if (e != null) { WriteToFile("Error StackTrace:" + e.StackTrace); } } public void Warning(string message) { WriteToFile("Warning:" + message); } private void WriteToFile(string message) { string fileName = DateTime.Now.ToString("yyyy-MM-dd") + ".sterr"; message = string.Format("{0}:{1}\n\r", DateTime.Now, message); File.AppendAllText(fileName, message); } }
演示代码一(加载模板文件):
//模板文件为bin\debug\templates\t1.st,内容: //$no:{$it.first$}$ StringTemplateGroup group = new StringTemplateGroup("g1", AppDomain.CurrentDomain.BaseDirectory + "Templates"); group.ErrorListener = new MyErrorListener(); StringTemplate st = group.GetInstanceOf("t1"); Console.WriteLine(st.ToString());
运行以上代码,可以看到bin\debug目录生成了以当前日期命名的文件2010-05-03.sterr,并把错误内容写入到了文件里。
演示代码二(加载模板组文件):
/*模板组文件为:bin\debug\templates\g1.stg,内容: group g1; t1(no) ::= << <no:{<it.first>}> >> */ StringTemplateGroup.RegisterGroupLoader(new LWMEGroupLoader(new string[]{AppDomain.CurrentDomain.BaseDirectory + "Templates"}, new MyErrorListener()));//LWMEGroupLoader看http://www.cnblogs.com/lwme/archive/2010/05/01/1725723.html StringTemplateGroup group = StringTemplateGroup.LoadGroup("g1"); StringTemplate st = group.GetInstanceOf("t1"); Console.WriteLine(st.ToString());
同样把错误写入到了文件里。
需要注意的是,必须先设置listener,再加载文件,否则不会按照设置的listener处理错误,这是因为加载的时候就已经对模板进行parse处理了。
如下使用方式都是错误的:
//错误使用方式一 StringTemplate st1 = new StringTemplate("$no:{$it.first$}$");//已经psrse st1.ErrorListener = new MyErrorListener(); //错误使用方式二 StringTemplateGroup.RegisterGroupLoader(new LWMEGroupLoader(new string[]{AppDomain.CurrentDomain.BaseDirectory + "Templates"})); StringTemplateGroup group = StringTemplateGroup.LoadGroup("g1");//已经parse group.ErrorListener = new MyErrorListener(); StringTemplate st = group.GetInstanceOf("t1");
Ok,内容比较简单,本文结束。
本文地址:http://www.cnblogs.com/lwme/archive/2010/05/03/1726298.html