Negli scorsi script, abbiamo introdotto i KeyedService (https://www.aspitalia.com/script/1465/Registrare-Servizi-Multipli-Tramite-Chiavi-ASP.NET-Core.aspx), una nuova funzionalità inclusa in .NET 8 che permette di registrare diverse implementazioni dello stesso servizio e associarle a una particolare chiave.
Ovviamente sono supportati anche in Blazor, anche se purtroppo non ancora tramite la direttiva @inject che tipicamente utilizziamo per iniettare servizi nelle nostre pagine.
Immaginiamo allora di aver registrato il nostro solito servizio per il WeatherForecast, come negli esempi precedenti:
public static async Task Main(string[] args) { var builder = WebAssemblyHostBuilder.CreateDefault(args); // .. altro codice qui .. builder.Services.AddKeyedTransient<IForecastProvider, AlwaysSunnyForecastProvider>("sunny"); builder.Services.AddKeyedTransient<IForecastProvider, ForecastProvider>(KeyedService.AnyKey); await builder.Build().RunAsync(); }
Per sfruttarlo in un componente, dovremo utilizzare l'attributo Inject associato a una proprietà:
@code { private IEnumerable<WeatherForecast>? forecasts; [Inject(Key = "sunny")] private IForecastProvider ForecastProvider { get; set; } protected override async Task OnInitializedAsync() { forecasts = this.ForecastProvider.GetForecasts(); } }
Ovviamente questo vale solo per pagine Razor. In tutti gli altri casi, possiamo continuare a sfruttare la constructor injection come visto negli altri esempi.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Esporre i propri servizi applicativi con Semantic Kernel e ASP.NET Web API
Generare un hash con SHA-3 in .NET
Gestione CSS in Blazor con .NET 9
Effettuare il refresh dei dati di una QuickGrid di Blazor
Ottimizzare le performance usando Span<T> e il metodo Split
Filtering sulle colonne in una QuickGrid di Blazor
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Path addizionali per gli asset in ASP.NET Core MVC
Gestione dei nomi con le regole @layer in CSS
Rendere le variabili read-only in una pipeline di Azure DevOps
Recuperare App Service cancellati su Azure