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
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Effettuare il refresh dei dati di una QuickGrid di Blazor
Generare velocemente pagine CRUD in Blazor con QuickGrid
Utilizzare QuickGrid di Blazor con Entity Framework
Minimal API in ASP.NET Core 8
Utilizzare un service principal per accedere a Azure Container Registry
Evitare il flickering dei componenti nel prerender di Blazor 8
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Usare le collection expression per inizializzare una lista di oggetti in C#
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Utilizzare il trigger SQL con le Azure Function