概述
T4是一个.net平台上的模板生成器,可以使我们根据具体的数据库生成相应的固定的类文件或接口,本片博客主要是根据EF中的model来生成相应的文件,先进行一个实例(生成抽象工厂类的模板),然后再讲一些理论的东西
实例和基本原理
添加文本模板
项目—右击—添加新项—文本模板
在文本模板中输入相应的内容
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>
<#
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this, 1);
MetadataTools ef = new MetadataTools(this);
string inputFile = @"..\\MVC架构.Model\\ModelFirst.edmx";
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
string namespaceName = code.VsNamespaceSuggestion();
EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Reflection;
using MVC架构.IDal;
using System.Configuration;
namespace MVC架构.DalFactory
{
public partial class SimpleDalFactory
{
<#
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{#>
public static I<#=entity.Name#>Dal Get<#=entity.Name#>Dal()
{
string classFullName = ConfigurationManager.AppSettings["DalNameSpace"] + ".<#=entity.Name#>Dal";
string dalAssembly = ConfigurationManager.AppSettings["DalAssembly"];
object obj = GetInstance(dalAssembly, classFullName);
return obj as I<#=entity.Name#>Dal;
}
<#}#>
}
}
生成内容
菜单栏—生成—生成MVC架构.DALFactory
基本原理
文本模板在运行的时候,先加载实体模型文件(和数据库是同步的),然后,从中获取相应表名称等信息,这样抽象工厂里的方法等信息就可以生成了;
文本模板和asp页面非常的相似,因为其里面可以可以运行相应的C#代码;
文本模板生成的类最好是partial类型,因为,文本模板每次生成相应文件的时候,都是全新的,如果你在生成的文件中手动的写入了一些内容,那么下次基于文本模板生成的时候,就会把之前自己写的内容给删除了;
文本模板的基本组成
静态形式
文本块
没有标签,原样输出
动态形式(生成模板对象时,运行)
代码块
<# C#逻辑代码 #>
表达式
<#= 表达式赋值 #>
变量
<#+ 定义变量,供代码块和表达式使用 #>
指令块
<#@ assemblyname="System.Data" #>:添加程序集引用(第三方时,最好在项目中添加引用)
<#@ importnamespace="System.Data" #>:导入要使用的命名空间(必须能在前面指定程序集中找到)
<#@ output extension=".cs"encoding="不写时(默认编码)" #>:生成文件扩展名
<#@ includefile="test.tt" #>:导入模板
<#@ templatelanguage="C#" hostSpecific="false" debug="false" #>:C#语言,不能调试
T4模板生成器和动软生成器
T4模板生成器是集成到了VS集成开发环境中,我们不需要向动软生成器那样,将生成的文件添加到项目中
总结
上面的例子的运行需要相应的实体模型文件,大家可以自己创建一个,然后,将文本模板中的实体模型的路径改一下就行了;T4模板生成器很强大,可以帮助我们做很多事情,同时也可以提高我们的面向对象思想。