在C# Console程序中调用T4的运行时文本模板生成代码
原理图:
- 在Visual Studio 2010中创建一个新console项目, 添加一个简单的Customer类
public class Customer
{
public string Name { get; set; }
public DateTime LastLoginDate { get; set; }
}
- 在项目中新增一个预处理过的文本模板(Preprocessed Text Template,VS2017等改名为运行时文本模板,Runtime
Text Template),命名为CustomerEmailTemplate.tt.
运行时文本模板的自定义工具属性为TextTemplatingFilePreprocessor。与传统T4模板不同,每个运行时文本模板都自动生成同名的cs文件,定义同名的类对象。调用其TransformText()方法就能获得转换结果。
下图为使用了第三方T4插件(Tangible T4)后的IDE编辑框:
- 撰写模板内容
按T4模板语法,写一个简单的文本模板如下:
<#@ template language="C#" #>
<#@ parameter
name="Customer"
type="ConsoleApplication1.Customer" #>//入参声明,对应产生同名cs文件Initialize方法
Hi <#= Customer.Name #>,
Thanks for logging onto our application on <#=
Customer.LastLoginDate.ToString("d MMMM yyyy") #>!
Please be sure to come back again soon!
The Email Generation Co.
- 使用模板
在Main方法中加入如下代码
var customer = new Customer
{
Name = "Jeffery",
LastLoginDate = new DateTime(2009, 11, 2, 19, 23, 32)
};
//1,创建模板的新实例
var template = new CustomerEmailTemplate();
//2,通过设置与初始化session(一个键值对的字典)来传入模板参数
template.Session = new Dictionary<string, object>()
{
{ "Customer", customer }
};
template.Initialize();
//3,调用TransformText方法输出生成的代码内容
Console.WriteLine(template.TransformText());
- 运行代码