Registrare servizi multipli tramite chiavi in ASP.NET Core 8

di Marco De Sanctis, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi