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
Ottenere un token di accesso per una GitHub App
Proteggere le risorse Azure con private link e private endpoints
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Creare agenti facilmente con Azure AI Agent Service
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Effettuare il refresh dei dati di una QuickGrid di Blazor
Utilizzare Container Queries nominali
Filtering sulle colonne in una QuickGrid di Blazor
Creare una libreria CSS universale: Clip-path
Referenziare un @layer più alto in CSS
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Utilizzare Azure AI Studio per testare i modelli AI