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