最近想在项目中使用一个代码生成器,用T4模板实现了,还是蛮方便的。关于T4模板的介绍可以看下园中相关系列文章T4的介绍,创建运行时模板。里面介绍蛮详细的。
代码生成器界面如下,比较简单,我这里是通过传入实体类名称生成对应层的代码:
添加预处理的模板 IDal.tt(其他类似),代码如下:
<#@ 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#>>
{
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Model;
namespace IDal
{
public interface I<#=ClassNames#>Dal : IRepository<<#=ClassNames#>>
{
}
}
同时新建一个IDal的部分类:
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;
}
}
}
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
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