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
- Gestire gli accessi con Token su Azure Container Registry
- Gestire progetti .NET + React in .NET Aspire
- Controllare la telemetria con .NET Aspire
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
- Utilizzare Container Queries nominali
- Gestire gli errori nelle Promise JavaScript con try()
- Recuperare le subissue e il loro stato di completamento in GitHub
- Ottimizzare le pull con Artifact Cache di Azure Container Registry
- Ridurre il reflow cambiando il CSS
- Creare una libreria CSS universale: i bottoni
- Configuratione e utilizzo .NET Aspire CLI
I più letti di oggi
- Nuova build di IE 7 beta 2 preview con la March 20 Refresh
- CSS Friendly Toolkit per ASP.NET 2.0 Beta 1, per migliorare il supporto agli standard web
- The Agentic Day - Milano
- Occhio alle bufale: Microsoft non invia patch via e-mail!
- CSS Friendly ASP.NET 2.0 Control Adapters Beta 3
- .NET Conference Italia 2025 - Milano
- IIS guadagna ancora terreno


