• 用T4模板实现简单的代码生成器


    最近想在项目中使用一个代码生成器,用T4模板实现了,还是蛮方便的。关于T4模板的介绍可以看下园中相关系列文章T4的介绍创建运行时模板。里面介绍蛮详细的。

    代码生成器界面如下,比较简单,我这里是通过传入实体类名称生成对应层的代码:

     

    添加预处理的模板 IDal.tt(其他类似),代码如下:

    View Code
    <#@ template language="C#" #>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Model;

    namespace IDal
    {
        public interface I<#=ClassNames#>Dal : IRepository<<#=ClassNames#>>
        {
        
        }
    }

     同时新建一个IDal的部分类:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace CodeBuilder.Template
    {
        public partial class IDal
        {
            public string ClassNames
            {
                get;
                set;
            }

            public IDal(string _ClassNames)
            {
                this.ClassNames = _ClassNames;
            }
        }
    }

     default.aspx.cs主要代码:

    View Code
    #region 通过反射取得要生成的类
                            Assembly ass = Assembly.Load("Template"); //获取程序集
                            Type myclass = null;
                            MethodInfo mymethod = null;
                            foreach (var name in list)
                            {
                                foreach (ListItem item in chkboxType.Items)
                                {
                                    if (item.Selected)
                                    {
                                        Type[] mytypes = ass.GetTypes();
                                        foreach (Type t in mytypes)
                                        {
                                            if (t.Name == item.Text)
                                            {
                                                myclass = t;
                                                break;
                                            }
                                        }
                                        Object obj = Activator.CreateInstance(myclass, name);
                                        mymethod = myclass.GetMethod("TransformText"); //取TransformText()函数
                                        String pageContent = mymethod.Invoke(obj, null).ToString();
                                        //创建文件
                                        File.AppendAllText(dirpath + @"\" + string.Format(item.Value, name) + ".cs", pageContent);
                                    }
                                }
                            }
                            #endregion 
    #region

     这里通过反射查找所有要生成的模板文件并创建文件,通过myclass.GetMethod("TransformText")调用TransformText方法,取得要生成的文件中内容。

    代码中的下载和压缩用到了园子中的工具类 http://www.cnblogs.com/zjyuan/archive/2011/11/06/2237883.html

     我这里生成的代码主要是为了符合自己项目的需要,实际使用中可以根据需要扩展如通过数据库表生成model,存储过程等

  • 相关阅读:
    模拟http请求 带 chunked解析办法一
    DLL入口函数
    修复吾爱OD数据窗口双击不出现偏移问题
    PE导入表分析
    持仓盈亏公式
    hadoop工作相关
    zookeeper常用命令
    git使用命令行上传文件
    redis中各种数据类型对应的jedis操作命令
    volatile关键字比较好的解释
  • 原文地址:https://www.cnblogs.com/kaka8384/p/2430866.html
Copyright © 2020-2023  润新知