T4模板生成器

概述

       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模板生成器很强大,可以帮助我们做很多事情,同时也可以提高我们的面向对象思想。

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值