Sfruttare i KeyedService in un'applicazione Blazor in .NET 8

di Marco De Sanctis, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi