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
Utilizzare il nuovo modello GPT-4o con Azure OpenAI
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Selettore CSS :has() e i suoi casi d'uso avanzati
Recuperare l'ultima versione di una release di GitHub
Miglioramenti nelle performance di Angular 16
Miglioramenti agli screen reader e al contrasto in Angular
Utilizzare Copilot con Azure Cosmos DB
Configurare lo startup di applicazioni server e client con .NET Aspire
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Supportare il sorting di dati tabellari in Blazor con QuickGrid
Evitare il flickering dei componenti nel prerender di Blazor 8
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub