最近想在项目中使用一个代码生成器,用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主要代码:

#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 

相关文章: