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
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Implementare l'infinite scroll con QuickGrid in Blazor Server
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Usare le navigation property in QuickGrid di Blazor
Creare alias per tipi generici e tuple in C#
Miglioramenti agli screen reader e al contrasto in Angular
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Limitare le richieste lato server con l'interactive routing di Blazor 8
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Eseguire i worklow di GitHub su runner potenziati
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Le novità di Angular: i miglioramenti alla CLI
I più letti di oggi
- Tutorial Entity Framework 6
- Tutorial Entity Framework
- Tutorial HTML5
- RT @aspitalia Partecipa al nostro evento #RCD4, fai un RT e sarai estratto per 1 copia di #sl3guidacompleta! http://u.aspitalia.com/bw
- Migliorare l'organizzazione delle risorse con Azure Policy
- Configurare più site su unico web role di Windows Azure
- Windows Phone 8 Developer Day - Milano
- ReBuild 2020 Live - Online
- ASPItalia.com Network: si aggiungono LINQItalia.com e SilverlightItalia.com
- Rilasciata la versione 1.0 di ASP.NET MVC