2008-10-15 50 views
1

我開始調查T4代碼生成。如何在T4 ClassBlock方法中使用模板?

我得到你可以在其中嵌入的C#/可進行巧妙的東西VB小塊的一個基本的模板...

<#@ template language="VB" debug="True" hostspecific="True" #> 
<#@ output extension=".vb" debug="True" hostspecific="True" #> 
Imports System 
<#For Each Table as String in New String(0 {"Table1","Table2"}#> 
Public Class <#=Table#>DA 
    Public Sub New 
     <#= WriteConstructorBody() #> 
    End Sub 
End Class 
<#Next#> 
<#+ 
    Public Function WriteConstructorBody() as String 
     return "' Some comment" 
    End function 
#> 

這是偉大的。但是我想能夠寫我的主塊這樣......

<#@ template language="VB" debug="True" hostspecific="True" #> 
<#@ output extension=".vb" debug="True" hostspecific="True" #> 
Imports System 
<# 
For Each BaseTableName as String in New String(){"Table1","Table2"} 
    WriteRecDataInterface(BaseTableName) 
    WriteRecDataClass(BaseTableName) 
    WriteDAInterface(BaseTableName) 
    WriteDAClass(BaseTableName) 
Next 
#> 

然後我想能夠有方法的類塊存在WriteX但自己使用的代碼通過實例即逃脫代碼塊是可寫的。

我該如何做到這一點?

回答

1

看來你可以在類塊中混合靜態輸出和模板代碼。下面是用C#示例:

<#@ template language="C#" #> 
<# HelloWorld(); #> 
<#+ 
    private string _field = "classy"; 
    private void HelloWorld() 
    { 
     for(int i = 1; i <= 3; i++) 
     { 
#> 
Hello <#=_field#> World <#= i #>! 
<#+ 
     } 
    } 
#> 
+0

我不得不看很難找到你的榜樣靜態文本....我的<# =東西是令人困惑的事情。 – 2008-10-15 11:24:13

2

你可以寫.....

<#@ template language="VB" debug="True" hostspecific="True" #> 
<#@ output extension=".vb" debug="True" hostspecific="True" #> 
Imports System 
<# 
For Each BaseTableName as String in New String(){"Table1","Table2"} 
    WriteRecDataInterface(BaseTableName) 

    ' WriteRecDataClass(BaseTableName) 
    ' WriteDAInterface(BaseTableName) 
    ' WriteDAClass(BaseTableName) 
Next 
#> 


<#+ Public Sub WriteRecDataInterface(BaseTableName as String)#> 
    Some Templated unescaped code might go here 
    <#+ For SomeLoopVar as Integer = 1 to 10 #> 
     Some Templated unescaped code might go here 
    <#+ Next #> 
    Some Templated unescaped code might go here 
<#+ End Sub #> 
'... 
'... 
' Other Subs left out for brevity 
'...