课程表

CodeSmith课程

工具箱
速查手册

CodeTemplate 对象

当前位置:免费教程 » 软件/图像 » CodeSmith

在使用代码模板产生代码时,CodeSmith 引擎背后使用了不少对象来帮助代码的生成,其中常用的有

  • CodeTempate (类似于 Asp.Net 的 Page 类)
  • Progress 用于显示代码生成的进度
  • CodeTemplateInfo 可以返回关于当前模板自身的一些信息。

本篇介绍 CodeTemplate ,CodeTemplate 代表了由 CodeSmith 引擎处理的代码模板对象,可以通过 CodeTemplate 对象直接和 CodeSmith 引擎交互,比如:

  • 使用 GetFileName 修改模板生成的缺省文件名
  • 使用 Render method 把模板的输出到多个文件中
  • 通过 events 把代码插入到 CodeSmith 引擎处理模板的过程中。
  • 通过 Response 属性直接在输出文件中写内容。

使用 GetFileName 修改模板输出的文件名

在前面的例子 CodeSmith 编写第一个代码模板,我们已经使用 GetFileName 修改过输出的文件名,比如在你的模板中定义了一个 ClassName 属性,可以通过 GetFileName 把模板输出的缺省文件名改成类名

  1. <%@ Template Language="C#" TargetLanguage="Text" %>
  2. <%@ Property Name="ClassName" Type="System.String" Default="ClassName" %>

This template shows off how to override the GetFileName method.

  1. <script runat="template">
  2. public override string GetFileName()
  3. {
  4. return ClassName + ".cs";
  5. }
  6. </script>

重载 ParseDefaultValue 方法

在定义属性的缺省值时,有时有些属性的缺省值可能无法从 String 转换,此时可以通过重载ParseDefaultValue 方法,这个方法会被 CodeSmith 引擎中处理每个属性时调用,如果你重载了这个方法,可以按照你自己的逻辑来处理属性的缺省值。

重载 Render 方法

CodeTemplate 的 Render 方法是 CodeSmith 引擎生成最终输出时调用的,可以通过重载这个方法来修改输出的内容或是把输出写到多个文件中。 比如下面代码除了生成缺省的输出外,还把输出写到另外两个文件中:

  1. <%@ CodeTemplate Language="C#" TargetLanguage="Text"
  2. Description="AddTextWriter Demonstration." %>
  3. <%@ Import Namespace="System.IO" %>
  4. //This template demonstrates using the AddTextWriter method
  5. //to output the template results to multiple locations concurrently.
  6. <script runat="template">
  7. public override void Render(TextWriter writer)
  8. {
  9. StreamWriter fileWriter1 = new StreamWriter(@"test1.txt", true);
  10. this.Response.AddTextWriter(fileWriter1);
  11. StreamWriter fileWriter2 = new StreamWriter(@"test2.txt", true);
  12. this.Response.AddTextWriter(fileWriter2);
  13. base.Render(writer);
  14. fileWriter1.Close();
  15. fileWriter2.Close();
  16. }
  17. </script>

第16张

注意调用基类的 base.Render,否则你就不会输出到缺省的文件。

模板事件

CodeTemplate 类定义了下面几个事件,你可以中这些事件发生时添加自动的事件处理。

使用 Response 对象

和 Asp.Net 的 Page 对象一样,可以通过 CodeTemplate 的 Response 属性直接在输出流中写入内容。比如

  1. <%@ CodeTemplate Language="C#" TargetLanguage="Text"
  2. Description="This template demonstrates writing directly to the Response property" %>
  3. <% RenderDirect(); %>
  4. <script runat="template">
  5. public void RenderDirect()
  6. {
  7. Response.WriteLine("Written directly to the Response property.");
  8. Response.WriteLine("Hello " + System.Environment.UserName + "!");
  9. }
  10. </script>

直接在输出流中写入两行文字。Response 对象的类型为 CodeTemplateWriter 类 ,常用的方法有:

  • AddTextWriter -添加额外的输出位置
  • Indent – 为输出添加一个缩进
  • Unindent – 为输出减少一个缩进
  • Write -写入内容
  • WriteLine – 写入内容并添加分行符
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号