1)修改模板支持变量定义,由插件的propertygrid进行解释模板定义的变量并在模板解释切入到模板中。
2)调整原有代码的生成方式,支持模板定义变量。(用户在编写新的模板时不在需要依赖原有版本固定数据的提供,导致模板处理的内容有所限制),修改原有插入代码没有格式化问题。
通过一个简单的模板例子介绍生成的代码
以下是一个实体生成模板的定义(Entity.cs)
#*define[
var NameSpace = System.String;/*名称空间*/
var tableInfo = CodeFactoryAddin.Base.DBTableInfo,CodeFactoryAddin.Base;/*表结构信息*/
]*#
#set($table=$tableInfo.Table)
#parse("header.vm")
using System;
namespace $namespace
{
[Serializable]
public class $table.Name
{
public $!{table.Name}()
{
}
#foreach($item in $table.Fields)
private $item.AppType m$item.Name;
public $item.AppType $item.Name
{
get
{
return m$item.Name;
}
set
{
m$item.Name = value;
}
}
#end
}
}
#*define[
var NameSpace = System.String;/*名称空间*/
var tableInfo = CodeFactoryAddin.Base.DBTableInfo,CodeFactoryAddin.Base;/*表结构信息*/
]*#
这部分是变量的内容,分别定义了一个String类型的NameSpace和DBTableInfo的tableInfo.
当类型存在Editor描述的时候,PropertyGrid会自行的处理其信息提供方式。
#set($table=$tableInfo.Table)
#parse("header.vm")
using System;
namespace $namespace
{
用过Monorail的朋友对#parse应该比较了解,在模板中插放一个子模板。把公共描述抽取出来:
/*************************************
Company:$!{Company}
Product:$!{Product}
Copyright:$!{Copyright}
Writer:$!{Writer}
EMail:$!{EMail}
CreateTime:$!{createtime}
**************************************/
简单看下生成效果:
/*************************************
Company:HFSoft
Product:NClay
Copyright:FanJianHan
Writer:Henry
EMail:henryfan@msn.com
CreateTime:2008-4-2 21:11:45
**************************************/
using System;
namespace Test
{
[Serializable]
public class Employees
{
public Employees()
{
//
// TODO: Add constructor logic here
//
}
private int mEmployeeID;
public int EmployeeID
{
get
{
return mEmployeeID;
}
set
{
mEmployeeID = value;
}
}
注意:
新的代码生成模板放在插件的Codes目录下面,原来的Table和Field目录作废。只需要把新的模板COPY到Codes目录插件就能获取得到模板。