Uno degli utilizzi più comuni del motore T4 è quello di generare codice C# partendo da una sorgente dati. Spesso la sorgente dati è un file di configurazione o anche un database. In questo script supponiamo di avere una serie di parametri di configurazione sul database e di volerli accedere da codice. Una delle soluzioni è quella di creare una API che prende in input la chiave del parametro.
public T GetParameter<T>(string key){ // codice di accesso al parametro } var value = GetParameter<string>("chiaveparametro");
Questo codice funziona benissimo ma presenta lo sconveniente di dover passare la chiave come stringa. Possiamo mitigare il problema creando una serie di costanti, ma quando le chiavi sono tante o quando ci sono più persone che possono aggiungerle diventa difficile la manutenzione. Utilizzando il motore di T4, possiamo creare un template che generi la classe di costanti così da rendere la manutenzione di questa classe estremamente semplice. Nel prossimo esempio vediamo come creare questo script.
<#@ template debug="true" language="C#" #> <#@ output extension=".cs" #> <# var keys = GetKeys(); #> class ParameterKey { <# foreach (string k in keys) { #> public const string <#= k #> = "<#=k#>"; <# } #> } <#+ private string[] GetKeys() { // codice ADO.NET per accedere al database e tornare le chiavi } #>
La cosa interessante da notare è l'utilizzo della sintassi <#+ #>. Un blocco di codice all'interno di questa sintassi è definito Class Feature Block e permette di inserire metodi e proprietà riusabili all'interno del template. Nel nostro caso abbiamo utilizzato questa sintassi per creare il metodo che recupera le chiavi dal database, ma possiamo creare qualunque tipo di metodo o proprietà possa servire.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Referenziare un @layer più alto in CSS
Path addizionali per gli asset in ASP.NET Core MVC
Implementare l'infinite scroll con QuickGrid in Blazor Server
Utilizzare una qualunque lista per i parametri di tipo params in C#
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Eliminare una project wiki di Azure DevOps
Utilizzare l nesting nativo dei CSS
Assegnare un valore di default a un parametro di una lambda in C#
Creare una libreria CSS universale - Rotazione degli elementi
I più letti di oggi
- Community Night@Basta!Italia on tour 2009 - Milano
- Real Code Day - Firenze
- Real Code Conference 4.0 - Firenze
- Windows Phone r8me - Roma
- Visual Studio 2008 Team Suite in RTM su MSDN Download
- Rilasciata la prima CTP del .NET Parallel Framework
- Annunciata la modalità di uscita di ADO.NET Entity Framework e dei Data Services