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
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Creare gruppi di client per Event Grid MQTT
Proteggere le risorse Azure con private link e private endpoints
Creare un webhook in Azure DevOps
Gestire il colore CSS con HWB
Utilizzare i primary constructor in C#
Recuperare l'ultima versione di una release di GitHub
Usare un KeyedService di default in ASP.NET Core 8
Disabilitare automaticamente un workflow di GitHub
Utilizzare QuickGrid di Blazor con Entity Framework
Change tracking e composition in Entity Framework
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core