T4 と Preprocessed Template を使用してコードを生成します。したがって、すべてのテンプレートを .tt ファイルに直接追加すると、次のようにすべて問題ありません。
<#@ template language="C#" #>
<html><body>
<h1>Sales for Previous Month</h2>
<table>
<# for (int i = 1; i <= 10; i++)
{ #>
<tr><td>Test name <#= i #> </td>
<td>Test value <#= i * i #> </td> </tr>
<# } #>
</table>
This report is Company Confidential.
</body></html>
しかし、いくつかのメソッドでコードをグループ化し、メソッドでメソッドを呼び出す必要がありますtransformText()
。
MyTemplate.tt ファイルは次のようになります。
<#@ template language="C#" #>
<#+
private string header(){
#>
<html><body>
<h1>Sales for Previous Month</h2>
<#+
return this.GenerationEnvironment.ToString();
}
private string body() {
#>
<table>
<#+ for (int i = 1; i <= 10; i++) { #>
<tr><td>Test name <#= i #> </td>
<td>Test value <#= i * i #> </td> </tr>
<#+ } #>
</table>
<#+
return this.GenerationEnvironment.ToString();
}
private string footer(){
#>
This report is Company Confidential ..
</body></html>
<#+
return this.GenerationEnvironment.ToString();
}
#>
関連する MyTemplate.cs ファイルは次のようになります。
// ....
public virtual string TransformText()
{
return this.GenerationEnvironment.ToString();
}
// ....
したがって、次のようにメソッド内のメソッドを呼び出しますTransformText()
。
// ....
public virtual string TransformText()
{
header();
body();
footer();
return this.GenerationEnvironment.ToString();
}
// ....
まだすべて問題ありませんが、.tt ファイルを変更して保存すると、.cs ファイルが再生成され、TransformText()
メソッドは最初の実装に戻ります (呼び出しなし)。
では、Preprocessed Template でいくつかのメソッドを使用してコードを生成するにはどうすればよいでしょうか? あなたの提案は何ですか?