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
Evitare il flickering dei componenti nel prerender di Blazor 8
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Gestire liste di tipi semplici con Entity Framework Core
Utilizzare il trigger SQL con le Azure Function
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Routing statico e PreRendering in una Blazor Web App
Installare le Web App site extension tramite una pipeline di Azure DevOps
Generare token per autenicarsi sulle API di GitHub
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Creare alias per tipi generici e tuple in C#
Utilizzare un service principal per accedere a Azure Container Registry
Ordinare randomicamente una lista in C#
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Eseguire script pre e post esecuzione di un workflow di GitHub
- Creare una libreria CSS universale: Cards
- Migliorare l'organizzazione delle risorse con Azure Policy