CodeTemplate 对象
编辑教程CodeTemplate 对象
在使用代码模板产生代码时,CodeSmith 引擎背后使用了不少对象来帮助代码的生成,其中常用的有
CodeTempate (类似于 Asp.Net 的 Page 类) | |
---|---|
Progress 用于显示代码生成的进度 | |
CodeTemplateInfo 可以返回关于当前模板自身的一些信息。 |
本篇介绍 CodeTemplate ,CodeTemplate 代表了由 CodeSmith 引擎处理的代码模板对象,可以通过 CodeTemplate 对象直接和 CodeSmith 引擎交互,比如:
使用 GetFileName 修改模板生成的缺省文件名 | |
---|---|
使用 Render method 把模板的输出到多个文件中 | |
通过 events 把代码插入到 CodeSmith 引擎处理模板的过程中。 | |
通过 Response 属性直接在输出文件中写内容。 | |
使用 GetFileName 修改模板输出的文件名 |
在前面的例子 CodeSmith 使用教程(2): 编写第一个代码模板,我们已经使用 GetFileName 修改过输出的文件名,比如在你的模板中定义了一个 ClassName 属性,可以通过 GetFileName 把模板输出的缺省文件名改成类名
<%@ Template Language="C#" TargetLanguage="Text" %>
<%@ Property Name="ClassName" Type="System.String" Default="ClassName" %>
This template shows off how to override the GetFileName method.
<script runat="template">
public override string GetFileName()
{
return ClassName + ".cs";
}
</script>
重载 ParseDefaultValue 方法
在定义属性的缺省值时,有时有些属性的缺省值可能无法从 String 转换,此时可以通过重载ParseDefaultValue 方法,这个方法会被 CodeSmith 引擎中处理每个属性时调用,如果你重载了这个方法,可以按照你自己的逻辑来处理属性的缺省值。
重载 Render 方法
CodeTemplate 的 Render 方法是 CodeSmith 引擎生成最终输出时调用的,可以通过重载这个方法来修改输出的内容或是把输出写到多个文件中。 比如下面代码除了生成缺省的输出外,还把输出写到另外两个文件中:
<%@ CodeTemplate Language="C#" TargetLanguage="Text"
Description="AddTextWriter Demonstration." %>
<%@ Import Namespace="System.IO" %>
//This template demonstrates using the AddTextWriter method
//to output the template results to multiple locations concurrently.
<script runat="template">
public override void Render(TextWriter writer)
{
StreamWriter fileWriter1 = new StreamWriter(@"test1.txt", true);
this.Response.AddTextWriter(fileWriter1);
StreamWriter fileWriter2 = new StreamWriter(@"test2.txt", true);
this.Response.AddTextWriter(fileWriter2);
base.Render(writer);
fileWriter1.Close();
fileWriter2.Close();
}
</script>
注意调用基类的 base.Render,否则你就不会输出到缺省的文件。
模板事件
CodeTemplate 类定义了下面几个事件,你可以中这些事件发生时添加自动的事件处理。
OnInit 事件帮助中代码模板创建时 | |
---|---|
OnPreRender 事件发生在准备写输出文件前 | |
OnPostRender 事件发生在准备写输出文件后 | |
OnPropertyChanged 事件发生在属性值发生变化时. |
使用 Response 对象
和 Asp.Net 的 Page 对象一样,可以通过 CodeTemplate 的 Response 属性直接在输出流中写入内容。比如
<%@ CodeTemplate Language="C#" TargetLanguage="Text"
Description="This template demonstrates writing directly to the Response property" %>
<% RenderDirect(); %>
<script runat="template">
public void RenderDirect()
{
Response.WriteLine("Written directly to the Response property.");
Response.WriteLine("Hello " + System.Environment.UserName + "!");
}
</script>
直接在输出流中写入两行文字。Response 对象的类型为 CodeTemplateWriter 类 ,常用的方法有:
AddTextWriter | 添加额外的输出位置 |
---|---|
Indent | 为输出添加一个缩进 |
Unindent | 为输出减少一个缩进 |
Write | 写入内容 |
WriteLine | 写入内容并添加分行符 |
Mos固件,小电视必刷固件
ES6 教程
Vue.js 教程
JSON 教程
jQuery 教程
HTML 教程
HTML 5 教程
CSS 教程
CSS3 教程
JavaScript 教程
DHTML 教程
JSON在线格式化工具
JS在线运行
JSON解析格式化
jsfiddle中国国内版本
JS代码在线运行
PHP代码在线运行
Java代码在线运行
C语言代码在线运行
C++代码在线运行
Python代码在线运行
Go语言代码在线运行
C#代码在线运行
JSRUN闪电教程系统是国内最先开创的教程维护系统, 所有工程师都可以参与共同维护的闪电教程,让知识的积累变得统一完整、自成体系。
大家可以一起参与进共编,让零散的知识点帮助更多的人。
X
选择支付方式:
立即支付
¥
9.99
无法付款,请点击这里
金额: 0 元
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间
如有疑问请联系QQ:565830900
正在生成二维码, 此过程可能需要15秒钟