程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> CodeSmith教程(8) CodeTemplate對象

CodeSmith教程(8) CodeTemplate對象

編輯:關於ASP.NET

在使用代碼模板產生代碼時,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,否則你就不會輸出到缺省的文件。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved