Una novità del motore di Dependency Injection di ASP.NET Core 8 è costituita dai cosiddetti KeyedServices: grazie a essi, possiamo registrare diverse implementazioni della stessa interfaccia dietro una chiave, così da poterne iniettare una versione specifica quando serve.
Per esempio, immaginiamo di avere due implementazioni di IForecastService:
public interface IForecastProvider { IEnumerable<WeatherForecast> GetForecasts(); } public class ForecastProvider : IForecastProvider { public IEnumerable<WeatherForecast> GetForecasts() { // altro codice qui .. } } public class AlwaysSunnyForecastProvider : IForecastProvider { public IEnumerable<WeatherForecast> GetForecasts() { // altro codice qui, ma sempre 25 gradi con il sole :) } }
Possiamo registrare i due servizi come segue:
builder.Services.AddTransient<IForecastProvider, ForecastProvider>(); builder.Services.AddKeyedTransient<IForecastProvider, AlwaysSunnyForecastProvider>("sunny");
Nel secondo caso, abbiamo utilizzato il nuovo metodo AddKeyedTransient, che accetta una chiave (di tipo object) tramite cui potremo selezionare questa particolare versione di IForecastProvider.
A questo punto, quando iniettiamo il servizio, non ci resta che utilizzare l'attributo FromKeyedServices per selezionarla:
public class WeatherForecastController : ControllerBase { private IForecastProvider _provider; public WeatherForecastController(IForecastProvider provider) { _provider = provider; } [HttpGet] public IEnumerable<WeatherForecast> Get() { return _provider.GetForecasts(); } [HttpGet("sunny")] public IEnumerable<WeatherForecast> GetSunny([FromKeyedServices("sunny")] IForecastProvider provider) { return provider.GetForecasts(); } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare il binding di date in Blazor
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Gestire la cancellazione di una richiesta in streaming da Blazor
Referenziare un @layer più alto in CSS
Migliorare l'organizzazione delle risorse con Azure Policy
Testare l'invio dei messaggi con Event Hubs Data Explorer
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Cambiare la chiave di partizionamento di Azure Cosmos DB
Gestione dell'annidamento delle regole dei layer in CSS