Oggi diamo uno sguardo rapido al Toolkit denominato T4 e distribuito a partire da VisualStudio 2008.
Il T4 che per esteso è denominato : Text Template Transformation Toolkit, è un generatore di codice basato su template di tipo testo che permette di generare codice in diversi linguaggi di programmazione.
I template utilizzati dal T4 sono composti da diverse parti, ciascuna delle quali dichiara come il codice debba essere generato. Tali parti si possono classificare nelle seguenti sezioni :
Directives : Ossia gli elementi che controllano come il template dovrà essere processato.
Text blocks : Ossia i contenuti che dovranno essere pubblicati nell’output. Per C# nelle classi da generare
Control blocks : Ossia i contenuti che inseriscono valori nei testi, controlli, condizioni, ecc…
Segue un’esempio di Header di definizione di un .tt :
<#@ assembly name="System.Windows.Forms.dll" #>
<#@ import namespace="System.Windows.Forms" #>
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>
Riga 1,2 : Aggiunge al tt la Reference per l’accesso alla libreria System.Windows.Form
Riga 3 : Imposta la direttiva per la compilazione di codice in lingua C#
Riga 4 : Estendi le funzionalità del .tt alle funzioni disponibili in un file esterno Es. Utility.CS.ttinclude
Riga 5 : Genera un output su file .CS , dunque genera una classe in linguaggio C#
Con l’utilizzo di questa tecnica è possibile generare codice automatico a DesignTime, semplificando la generazione di numerose righe di codice specie quando si tratta di codice ripetitivo.
Un’altra modalità di utilizzo del T4 è quella di generatore dell’output di un’applicazione. In questo caso il meccanismo da utilizzare a Runtime opera seguendo i due passi descritti nel seguente diagramma funzionale
Nel primo passo quello del Generate, il file .tt viene parserizzato dal motore T4 che lo processa e lo compila in un assembly .NET.
Nel secondo passo viene generata un’istanza di questa classe e viene invocato il suo metodo TransformText mediante il quale verrà generato l’output desiderato.

0 commenti:
Posta un commento