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
Hosting di componenti WebAssembly in un'applicazione Blazor static
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Implementare il throttling in ASP.NET Core
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Evitare la command injection in un workflow di GitHub
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Sfruttare al massimo i topic space di Event Grid MQTT
Utilizzare la session affinity con Azure Container Apps
Creazione di componenti personalizzati in React.js con Tailwind CSS
Trasformare qualsiasi backend in un servizio GraphQL con Azure API Management
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet