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
Creare alias per tipi generici e tuple in C#
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Limitare le richieste lato server con l'interactive routing di Blazor 8
Disabilitare automaticamente un workflow di GitHub (parte 2)
Ottimizzazione dei block template in Angular 17
Gestire liste di tipi semplici con Entity Framework Core
Installare le Web App site extension tramite una pipeline di Azure DevOps
Migrare una service connection a workload identity federation in Azure DevOps
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Creare form tipizzati con Angular
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs