标签:
在此次做教务系统时,用到了许多T4模板来生成代码。那么T4模板到底是干什么的,为什么要使用T4模板呢?这里简单的了解一下它的作用。
在创建一个T4模板时,默认会出现以下代码段:
<#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Text" #> <#@ import namespace="System.Collections.Generic" #> <#@ output extension=".txt" #>上面这些代码即是T4模板中的指令块,即
模板指令:即指明这里用的是C#的代码模板,程序集指令,导入指令,输出指令,以及还有参数指令和包含指令。在运用过程中没有接触到这么多细节的东西,只是简单的了解了一下,这里拿系统中的一个小例子来说明:
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#><#@
output extension=".cs"#> //这里输出为.CS文件
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);//区域代码
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\ITOO.Basic.Model\\BasicEntity.edmx"; //这里
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);//创建EdmItemCollection并加载元数据
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using ITOO.Basic.Model; //这些是文本块
using ITOO.Library.Core;
namespace ITOO.Basic.IBLL
{
<#
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name)) //这些是控制块
{
#>
public partial interface I<#=entity.Name#>BLL :IBaseService<<#=entity.Name#>>
{
}
<#}#>
}
文本块:直接复制到输出的内容。
控制块:向文本插入可变值并控制文本的条件或重复部件的程序代码,不能在控制块中嵌套控制块。这里包括可变化的参数,如<#=entity.Name#>用<#...#>来表示。
以上是一些对T4模板的简单认识,从功能上看,主要是为了减少代码重复。从而使开发人员减少重复的工作。更多详情请见:http://www.cnblogs.com/heyuquan/archive/2012/07/26/2610959.html标签:
原文地址:http://blog.csdn.net/wangyy130/article/details/42298589