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
Utilizzare una qualunque lista per i parametri di tipo params in C#
Scrivere selettori CSS più semplici ed efficienti con :is()
Definire il metodo di rilascio in .NET Aspire
Controllare la velocità di spostamento su una pagina HTML
Eliminare una project wiki di Azure DevOps
Abilitare .NET 10 su Azure App Service e Azure Functions
Utilizzare WebJobs su Linux con Azure App Service
Pubblicare un MCP Server in GitHub MCP Registry
Utilizzare Containers in .NET Aspire
Managed deployment strategy in Azure DevOps
Mischiare codice server side e client side in una query LINQ con Entity Framework
Importare repository da Bitbucket a GitHub Enterprise Cloud


