2008-10-15 27 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 
'...