CodeSmith的核心是模板,而使模板具有活力的就是屬性,通過定義屬性從而使代碼模板能夠根據配置生成所需的代碼。在使 用代碼模板時首先也必須給模板定義的屬性定義值才能使用CodeSmith通過模板產生代碼。有些屬性具有缺省值,這些屬性可以 不需要配置。
模板中的屬性通過Property指令來定義:
<%@ Property Name="ClassName" Type="String" Default="Class1" Category="Context" Description="The name of the class to generate" Optional="true" % >
屬性參數的介紹:
Name:模版使用的參數的名稱。
Type:參數類型可以是任何.NET有 效的數據類型,例如簡單的String類型或者是CodeSmith的SchemaExplorer.DatabaseSchema類型。注意,類型必須是基類庫的類 型,例如用String或者Int32代替string和int。
Default:設置默認值。
Category:用來說明這個屬性在CodeSmith Explorer的屬性面板中顯示成什麼類型,例如下拉選擇、直接輸入等。
Description:在屬性面板中對於這個屬性的描述。
Optional:設置這個屬性是否是必須的,設置為True表明這個參數值可有可無,設置為False則這個參數必須有值。
Editor:表明在屬性面板中輸入這個屬性的值時使用何種GUI(圖形界面編輯器)編輯器。
EditorBase:編輯器使用的基 本類型,如果沒有被說明,UITypeEditor為默認編輯器。
Serializer 定義用於屬性的IPropertySerializer類型。
OnChanged 為屬性發生變化時定義事件處理代碼。
DeepLoad 只用在SchemaExplorer對象,當為True,SchemaExplorer一 次性取得有關數據庫Schema的所有信息而避免多次查詢數據庫。
在配置屬性時,每個屬性根據其類型和Editor不同而使 用不同的配置界面,對應一些簡單的類型,比如Int,String可以直接編輯,而對於數據庫類型可以使用Schema Explorer, CodeSmith預先定義了一些屬性編輯器,此外也可以通過自定義為某些特殊的屬性類型定義新的屬性編輯器,這在後面再介紹。 通常情況下無需自定義。
在某些情況下,如果所定義的屬性值為一個列表中的某個值,比如在CodeSmith自帶的模板 SortedList.cst 中定義了一個屬性用來為所生成的類設置可見性: