Come sappiamo, in Blazor, la configurazione è esposta tramite il servizio IConfiguration, con il quale possiamo accedere alle sezioni e ai valori all'interno di appsettings.json. Tuttavia, di solito è molto più comodo utilizzare una classe .NET per rappresentare il contenuto di questo file, così che possiamo sfruttare la tipizzazione forte quando accediamo alle impostazioni.
Questa possibilità è ancora più interessante nel caso visto nello scorso script, visto che possiamo condividere lo stesso oggetto tra client e server.
Per esempio, immaginiamo di riscrivere l'endpoint che avevamo visto in precedenza in questo modo:
[HttpGet] public ClientConfiguration Get() { return new ClientConfiguration { WelcomeMessage = "Hello from the server" }; }
Questa classe ClientConfiguration potrebbe essere inserita in una libreria condivisa tra ASP.NET Core e Blazor:
public class ClientConfiguration { public string WelcomeMessage { get; set; } }
A questo punto, in Blazor possiamo registrare ClientConfiguration nell'IoC container in questo modo:
public static async Task Main(string[] args) { //... altro codice qui ... builder.Services.AddScoped<ClientConfiguration>(sp => { var config = sp.GetService<IConfiguration>(); var result = new ClientConfiguration(); config.Bind(result); return result; }); await builder.Build().RunAsync(); }
Il codice è piuttosto semplice, e si basa sul metodo Bind di IConfiguration, tramite cui idratare il contenuto di un'istanza di ClientConfiguration in base a quanto letto dalle varie sorgenti di configurazione. Il risultato è che possiamo ora iniettare ClientConfiguration direttamente in tutti i componenti o servizi che ne abbiano bisogno:
@page "/" @inject BlazorApp11.Shared.ClientConfiguration config <h1>@this.config.WelcomeMessage</h1>
L'aspetto interessante è che questo metodo funziona a prescindere da quali e quante sorgenti di configurazione utilizziamo, siano esse file statici o endpoint come nell'esempio che abbiamo fatto.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare Container Queries nominali
Utilizzare DeepSeek R1 con Azure AI
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Utilizzare QuickGrid di Blazor con Entity Framework
Testare l'invio dei messaggi con Event Hubs Data Explorer
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Configurare lo startup di applicazioni server e client con .NET Aspire
Rendere le variabili read-only in una pipeline di Azure DevOps
Potenziare la ricerca su Cosmos DB con Full Text Search