• 用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,存储过程等

  • 相关阅读:
    需求分析模板
    【转】卓有成效的敏捷开发流程
    敏捷建模者的个性
    四个凡事:有章可循,有人负责,有据可查,有人监督
    全局变量初始化的重要性
    Windows下虚拟串口工具:com0com可做串口调试用
    【转】各种加解密算法比较
    WSASocket函数未定义和重定义错误
    海明校验码
    stl学习总结
  • 原文地址:https://www.cnblogs.com/kaka8384/p/2430866.html
Copyright © 2020-2023  润新知