将对象传递给T4文本模板

时间:2013-03-02 23:34:09

标签: c# .net t4

我有一个T4模板,我试图在运行时传递对象值。

基本上我们要做的是:

  1. 从Windows .NET表单中,以文本形式读取文件

  2. 将外部对象属性设置为文本值

  3. 在具有输出的T4文本模板中访问该对象属性 扩展.java。

  4. 我现在开始非常简单,我只有模板和表单并说出一个外部类对象:

    Flow

    当然,阅读表单部分中的文本并设置像foo.foocode这样的对象属性是相当简单的。

    我无法弄清楚如何在模板中访问该对象变量或属性,而且我已经看了一天多了..

    由于

1 个答案:

答案 0 :(得分:15)

在运行时,您只能转换预处理的模板,因为模板引擎不是Visual Studio的可再发行组件。您可以使用parameter directive将对象传递给预处理的模板。传递给模板的对象类型必须使用SerializableAttribute进行修饰。在调用TransformText()方法之前,将参数的值放入模板会话中。

使用预处理模板时,将忽略输出扩展指令。 TransformText()方法返回包含生成代码的字符串。您可以将其保存为您想要的任何文件类型。

<#@ template debug="true" #>
<#@ parameter name="MyObject" type="MyNamespace.MyType" #>

<#
  // now access the passed parameter using
  this.MyObject
#>

调用preprocessedTemplate:

var templateInstance = new MyTemplate();
templateInstance.Session = new Dictionary<string, object>();
templateInstance.Session.Add("MyObject", new MyType());
templateInstance.Initialize();

var generatedCode = templateInstance.TransformText();

System.IO.File.WriteAllText("outputfile.java", generatedCode);

希望这有帮助。