快捷搜索:

StringTemplate.Net 学习笔记(11):自定义错误处理

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) ::= }>

>>

*/

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

您可能还会对下面的文章感兴趣: