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 中定义了一个属性用来为所生成的类设置可见性:
这可以通过定义一个枚举类型来实现:
<script runat="template">
Public Enum AccessibilityEnum
[Public]
[Protected]
[Friend]
[ProtectedFriend]
[Private]
End Enum
</script>
然后为所定义的属性的类型定义为这个枚举类型:
<%@ Property Name="Accessibility" Type="AccessibilityEnum"
Category="Options" Description="The accessibility of the class to be generated." %>
由于属性可以定义为可选(Optional),因此在模板中需要检测某个的属性是否配置过,比如下面定义了一个属性为Optional<%@ Property Name="ClassNamespace" Type="System.String" Optional="True"
Category="Context"
Description="The namespace that the generated class will be a member of." %>
在模板中脚本需要检测这个属性是否有值可以通过下面代码来实现:
<% if (ClassNamespace != null && ClassNamespace.Length > 0)
{ %>namespace <%= ClassNamespace %>{<% }
%>
从上面也可以看出,在脚本中使用属性直接使用属性名字即可,无需加前缀(比如$之类的前缀)。
分享到:
相关推荐
### 第 6 章:基本语法 - 声明和使用属性 在 CodeSmith 中,属性是模板中的关键元素,它们存储数据并可以在模板中引用。这一章将阐述如何声明和使用属性,以及如何从外部数据源(如数据库或 XML 文件)填充这些属性...
- **属性声明**:不同于ASP.NET,CodeSmith支持模板属性声明,这些属性可以用来配置模板的行为。 2. **CodeSmith工具组件**: - **CodeSmith Studio**:这是一个设计和编译模板的集成环境,提供了图形化的模板...
- **变量输出**:使用 `<%= expression %>` 格式输出变量值,如 `<%= ThisIsString %>` 和 `<%= ThisIsTable.Name %>`。 - **调用函数**:当需要执行更复杂的计算或操作时,可以在函数区域定义函数,然后在模板区域...
4. **引用声明区域**:通过 `<%@ Assembly %>` 和 `<%@ Import Namespace="..." %>` 引入所需的程序集和命名空间,如数据库操作所需 `SchemaExplorer` 和文件操作所需 `System.IO`。 5. **模板区域**:这是实际生成...
2. **编写CST文件**:使用CST语法编写模板,可以包含字段名、属性、方法等动态内容,同时也可以插入静态文本,如注释、版权信息等。 3. **使用CodeSmith参数**:在模板中引用CodeSmith提供的参数,如数据库表名、...
【codesmith入门】这篇文档是针对codesmith这款代码生成工具的快速入门指南,旨在帮助初学者了解和掌握codesmith的基本操作和使用技巧。codesmith是一款强大的基于模板的代码生成工具,利用C#、VB.NET或Jscript等...
- **属性设置区域**:定义模板所需的外部参数,包括不同类型的参数声明,如String、Bool、DatabaseSchema、TableSchemaCollection和TableSchema。 - **注册模板区域**:用于注册并调用其他模板,需提供所需参数。 ...
首先,从文件标题和描述中我们可以看出,这是关于CodeSmith的教程。CodeSmith 是一个基于模板的代码生成器,适用于 .NET 环境,特别是与C# 配合使用。它允许开发者通过模板快速生成数据库访问代码、实体类、数据访问...
一个基本的实体类模板可能包括类的命名、属性的声明以及属性的注释等部分。例如,模板可能会有以下结构: ```csharp foreach (Column column in Table.Columns) {#> public <%= column.DbType.CSharpType %> ...
3. **调用函数**:使用标准的C#条件语句或循环结构,如`(条件){%>...<%}%>`或`(循环体){%>...<%}%>`,以实现逻辑判断或循环操作。 4. **调用模板**:通过创建实例并调用`Render()`方法来执行子模板,实现模板间的...
本文主要围绕如何使用CodeSmith Professional v5.1.3.8510进行模板编写和设置,以便支持中文显示和文件编码,并介绍其主要的六个模板区域。 首先,确保CodeSmith支持中文显示和保存。在“Tools”菜单中选择...
这个应用全集主要是为了帮助那些在探索和使用CodeSmith过程中遇到中文文档不足的开发者,提供一系列由作者和同事共同编写的(或翻译的)教程和指南。 首先,创建一个CodeSmith模板的基本步骤涉及以下几个关键点: ...
这个超级好的学习教程主要介绍了如何使用CodeSmith进行模板设计和代码自动生成,特别强调了在处理中文字符时的设置方法以及模板的六个关键区域。 首先,确保CodeSmith支持中文显示和保存至关重要。在【工具】->...
#### 二、CodeSmith模板配置与基本语法 ##### 2.1 模板配置 CodeSmith模板文件通常以`.cst`为扩展名。模板文件中的关键部分包括元数据声明、属性定义、注册其他模板以及代码生成逻辑等。元数据声明用于指定模板的...