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
Simulare Azure Cosmos DB in locale con Docker
Utilizzare Copilot con Azure Cosmos DB
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Creare una libreria CSS universale - Rotazione degli elementi
Implementare l'infinite scroll con QuickGrid in Blazor Server
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Limitare le richieste lato server con l'interactive routing di Blazor 8
Ordinare randomicamente una lista in C#
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Gestione degli stili CSS con le regole @layer
C# 12: Cosa c'è di nuovo e interessante
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online