Il motore di dependency injection di ASP.NET Core presenta molte funzionalità che, alle volte, non sono di così evidente utilizzo. Un esempio pratico è dato dalla possibilità di registrare servizi generici.
Con ogni probabilità avremo usato decine di volte l'interfaccia ILogger<T> nei nostri controller:
public HomeController(ILogger<HomeController> logger) { _logger = logger; }
Questo è un tipico esempio in cui il tipo registrato come servizio sia un cosiddetto open generic, in cui cioé non specifichiamo il parametro generico in fase di configurazione dell'IoC container, ma solo quando andiamo effettivamente a utilizzarlo.
Immaginiamo allora di aver creato, nella nostra infrastruttura di servizi applicativi, una generica interfaccia IRepository
public interface IRepository<TEntity> { Task<TEntity> GetById(int id); // .. altro codice qui .. } internal class Repository<TEntity> : IRepository<TEntity> { public Task<TEntity> GetById(int id) { ... } }
All'interno della classe Startup potremo configurare questo servizio usando il seguente overload di services.AddTransient:
public void ConfigureServices(IServiceCollection services) { // .. altro codice qui .. services.AddTransient(typeof(IRepository<>), typeof(Repository<>)); }
In questo modo, potremo specificare il parametro generico direttamente nel controller, al momento in cui iniettiamo l'istanza:
public PeopleController(IRepository<Person> people, IRepository<City> cities) { _people = people; _cities = cities; }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare i tag nell'output cache di ASP.NET Core 7
Sfruttare la local cache del browser tramite gli ETag in ASP.NET Core
Cache policy su route groups di Minimal API in ASP.NET Core 7
Migliorare la scalabilità di ASP.NET Core 7 grazie all'output cache
Gestire server e pc on premise con Azure Arc
Configurare policy CORS in Azure Container Apps
Le novità di .NET 7 e C# 11
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Eseguire attività con Azure Container Jobs
Taggare la output cache in base al routing in ASP.NET Core
Applicare il versioning ai nostri endpoint ASP.NET Core Minimal API
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare i primary constructor in C#
- Installare le Web App site extension tramite una pipeline di Azure DevOps
- .NET Conference Italia 2023 - Milano e Online
- Eseguire query verso tipi non mappati in Entity Framework Core