2008-10-15 8 views
1

Je commence à étudier T4 pour la génération de code.Comment utiliser des modèles dans une méthode T4 ClassBlock?

-je obtenir que vous avez un modèle de base dans lequel vous pouvez incorporer de petits morceaux de C#/vb qui peut effectuer des trucs astucieux ...

<#@ 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 
#> 

C'est grand .. Cependant, je voudrais être en mesure écrire mon bloc principal ainsi ...

<#@ 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 
#> 

Je voudrais être en mesure d'avoir les méthodes WriteX existent dans un bloc de classe, mais eux-mêmes être accessible en écriture en utilisant le code par exemple des blocs de code-à-dire échappé.

Comment puis-je y parvenir?

Répondre

1

Il semble que vous pouvez mélanger la sortie statique avec le code du modèle dans les blocs de classe. Voici un exemple avec C#:

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

je devais regarder difficile de localiser le texte statique dans votre exemple .... pour moi le <# = substance était des questions confuses. –

2

Vous pouvez écrire .....

<#@ 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 
'... 
Questions connexes