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
Gestire il ciclo di vita di AbortController in Javascript
Keynote Global Azure 2026 - ASPItalia.com
Integrare email esterne con Azure Functions e Managed Connectors
Utilizzare zizmor per rendere più sicuri i workflow di GitHub
Dallo sviluppo locale ad Azure con .NET Aspire
Modificare lo stile in una QuickGrid Blazor
Gestione delle issue type con GitHub
Blue/Green Release in locale con .NET Aspire
Evidenziare una porzione di testo in un pagina dopo una navigazione
Logica Graceful Degradation in HTML e CSS
Evitare il cache poisoning nei workflow di GitHub
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Accedere a risorse e immagini in Windows Store app di Windows 8
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Permettere il Drag-and-drop solo su zone predefinite con Silverlight 2.0
- Consumare dati binari in realtime lato client con ASP.NET Core SignalR
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Personalizare l'icona e le funzionalità di un sito web per iOS e IE
- Caricamenti veloci da CDN e fallback locale con ASP.NET Core
- Utilizzare dati in formato XML in XAML
- Accedere a dati esposti con WebService con Silverlight 1.0


