CodeSmith3-对象(CodeTemplate、Response、CodeTemplateInfo)
CodeTemplate(代码模板对象)
模板继承此对象
//可以重载这个方法设置模板输出到文件的名称。否则CodeSmith将基于模板名称和TargetLanguage设置它的文件名。
public virtual void GetFileName()
//Render方法是在模版执行完成进行模版输出时执行,你可以通过重载CodeTemplate.Render方法来修改CodeSmith输出时的事件处理。例如:你可以修改模版输出时的方式来代替现在默认的方式。
public virtual void Render(TextWriter)
//这个方法可以实现从一个模板中将其所有属性的值拷贝到另一个模板所有对应属性中,并按照相应的属性值类型进行匹配。
public void CopyPropertiesTo(CodeTemplate target)
//这个方法将返回一个给定名称的属性的值。
public object GetProperty(string propertyName)
//此方法可以根据给定名称的属性设置其值。
public void SetProperty(string propertyName, object value)
//这个方法将现有的属性值保存成一个XML的属性字符串。
public string SavePropertiesToXml ()
//这个方法将当前属性值保存成一个XML的属性文件。
public void SavePropertiesToXmlFile (string fileName)
//从保存在XML文件中的属性字符串,将模板的属性值恢复。
public void RestorePropertiesFromXml(string propertySetXml, string baseDirectory)
//从保存在XML文件中的属性文件,将模板的属性值恢复。
public void RestorePropertiesFromXmlFile(string fileName)
重写Render案例
下面这段代码展示了在保持CodeSmith默认的窗口显示的同时,把结果输出到两个不同的文件。
<%@ Template Language="C#" TargetLanguage="Text" %>
<%@ Import Namespace="System.IO" %>
模板内容
<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>
OutputFileCodeTemplate
OutputFileCodeTemplate继承自CodeTemplate,可帮助我们将生成的代码输出到文件中
OutputFileCodeTemplate主要做两件事情:
- 它添加一个名为OutputFile的属性到你的模版中,该属性要求你必须选择一个文件;
- 模版重载了方法OnPostRender(),在CodeSmith生成代码完成后把相应的内容写入到指定的文件中去。
<%@ Template Language="C#" TargetLanguage="Text" Inherits="CodeSmith.BaseTemplates.OutputFileCodeTemplate" %>
<%@ Assembly Name="CodeSmith.BaseTemplates" %>
<%@ Import Namespace="System.Windows.Forms.Design" %>
模板内容222
<script runat="template">
[Editor(typeof(FileNameEditor), typeof(System.Drawing.Design.UITypeEditor)),Category("Custom"), Description("User selected file.")]
public override string OutputFile
{
get {return base.OutputFile;}
set {base.OutputFile = value;}
}
</script>
Response
这个对象提供直接写输出模板的方法。与ASP.NET的response对象很相似。
<script runat="template">
//输出文本
Response.Write("This will appear in the template");
//输出文本+换行
Response.WriteLine("This will appear in the template");
//输出文本的缩进级别
IndentLevel (Int32)
//输出缩进一个级别
Indent()
//输出少缩进一个级别
Unindent()
//为Response对象增加一个TextWriter。这样可以使在同一时间用多个TextWriter输出模板
AddTextWriter(TextWriter writer) Method
</script>
CodeTemplateInfo
此对象包含一些当前模板的信息。
//返回模板创建时间,date类型值
DateCreated (DateTime)
//返回模板最后一次被修改的时间。
DateModified (DateTime)
//返回模板声明时对模版的描述信息。
Description (string)
//返回当前模板文件所在的路径。
DirectoryName (string)
//返回当前模版文件的文件名称。
FileName (string)
//返回当前模板的完整路径,路径名+文件名。
FullPath (string)
//返回代码模版声明时使用的语言。
Language (string)
//返回代码模版声明时生成的目标语言。
TargetLanguage (string)