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
Introduzione alle Container Queries
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Creare un webhook in Azure DevOps
Introduzione ai web component HTML
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
.NET Aspire per applicazioni distribuite
Ricevere notifiche sui test con Azure Load Testing
La gestione della riconnessione al server di Blazor in .NET 9
Referenziare un @layer più alto in CSS
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Eseguire una ricerca avanzata per recuperare le issue di GitHub
I più letti di oggi
- Eseguire query in contemporanea con EF
- Fissare una versione dell'agent nelle pipeline di Azure DevOps
- .NET Aspire per applicazioni distribuite
- Utilizzare Locust con Azure Load Testing
- Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
- Repaint, Reflow e Compositing: Come Funziona il Rendering nel Browser
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!