T4:是否可以使用脚本填写模板,同时仍然通过脚本提供部分?

时间:2010-01-14 18:34:23

标签: code-generation t4

我有一个模板,可以生成一个类和一个互补的接口,以便从脚本中继续使用它:

<#@ template language="C#v3.5" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ include file="T4Toolbox.tt" #>
<#@ include file="../BusinessObjectTemplate.tt" #>
<#
BusinessObjectTemplate template = new BusinessObjectTemplate();
template.BusinessName="Priority";

template.PropertyList=new Dictionary<string,BusinessPropertyT4>{
    {"Value",new BusinessPropertyT4("byte")},
    {"Display",new BusinessPropertyT4("string")},
};
template.TopRegionText="internal ModelPriority(byte value, String display)\r\n\t\t{\r\n"+
    "\t\t\tValue=value;\r\n"+"\t\t\tDisplay=display;\r\n"+ "\t\t}";
template.Render();
#>

我如何从脚本中生成TopRegionText(构造函数)而不向它提供直接字符串并将其放到模板中的正确位置?

1 个答案:

答案 0 :(得分:1)

假设您更喜欢使用T4的模板功能来生成构造函数,您可以在BusinessObjectTemplate类中定义一个虚方法(即GenerateTopRegionText),并从BusinessObjectTemplate.TransformText方法中调用它。完成后,您可以像这样覆盖它:

<#+
class PriorityTemplate: BusinessObjectTemplate
{
    override void GenerateTopRegionText()
    {
#>
    internal ModelPriority(byte value, string display)
    {
        Value = value;
        Display = display;
    }        
<#+
    }
}
#>

More here