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 in contemporanea con EF
Ridurre il reflow ottimizzando il CSS
Controllare la telemetria con .NET Aspire
Evitare memory leaks nelle closure JavaScript
Abilitare il rolling update su Azure Functions flex consumption
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Integrare un servizio esterno con .NET Aspire
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Abilitare automaticamente il force push di un gruppo su Azure DevOps
Generare una User Delegation SAS in .NET per Azure Blob Storage
Introduzione ai web component HTML
Implementare il throttle in JavaScript
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Gli oggetti CallOut di Expression Blend 4.0
- Le DirectInk API nella Universal Windows Platform
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Sfruttare una CDN con i bundle di ASP.NET
- Inserire le news di Punto Informatico nel proprio sito
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit


