Nel .NET Framework e fino alla versione 3 di .NET Core, per eseguire codice di inizializzazione una libreria siamo stati costretti a usare strumenti di post compilazione come PostSharp o Mono.Cecil (solo per citarne alcuni), oppure abbiamo messo a disposizione un metodo Startup, Initialize o simile che doveva essere invocato in fase di startup dell'applicazione da chi utilizza la libreria. Entrambi i metodi sono delle soluzioni a un problema strutturale di .NET: non esiste un modo per eseguire codice quando una libreria viene caricata.
Con .NET 5 il discorso cambia, in quanto possiamo creare un metodo e decorarlo con l'attributo ModuleInitializerAttribute. In fase di compilazione un source generator già presente in .NET prende il codice di questo metodo e lo prepara per essere eseguito subito dopo il caricamento della libreria.
using System; using System.Runtime.CompilerServices; namespace ModuleInitializers { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } } class MyInitializer { [ModuleInitializer] public static void Init() { Console.Write("Initialized"); } } }
Per poter essere marcato come module initializer, il metodo:
- deve essere marcato come static;
- non deve accettare parametri;
- deve tornare void;
- non deve essere generic e non deve essere contenuto in una classe generic;
- deve essere internal o public e non può essere una local function.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare Copilot con Azure Cosmos DB
Creare una libreria CSS universale: i bottoni
Generare velocemente pagine CRUD in Blazor con QuickGrid
Anonimizzare i dati sensibili nei log di Azure Front Door
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Proteggere le risorse Azure con private link e private endpoints
Recuperare App Service cancellati su Azure
Utilizzare Azure Cosmos DB con i vettori
Utilizzare Locust con Azure Load Testing
Utilizzare una qualunque lista per i parametri di tipo params in C#
Collegare applicazioni server e client con .NET Aspire
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow