Creare un Module Initializer in .NET 5

di Stefano Mostarda, in .NET,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi