zoukankan      html  css  js  c++  java
  • 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) ::= <<
    		<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

  • 相关阅读:
    Office365激活(无需密钥,无需下载软件)
    java垃圾回收及其优化
    Kafka副本机制
    sdn的相关学习系列之一mininet的安装
    javascript day 02
    关于javaScript
    html-day06
    盒子模型
    html-day04
    html--笔记day03
  • 原文地址:https://www.cnblogs.com/lwme/p/1726298.html
Copyright © 2011-2022 走看看