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
Utilizzare Azure Cosmos DB con i vettori
Utilizzare politiche di resiliency con Azure Container App
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Implementare l'infinite scroll con QuickGrid in Blazor Server
Generare token per autenicarsi sulle API di GitHub
Usare le collection expression per inizializzare una lista di oggetti in C#
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Estrarre dati randomici da una lista di oggetti in C#
Aggiornare a .NET 9 su Azure App Service
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Eseguire operazioni sui blob con Azure Storage Actions
I più letti di oggi
- Associare Application Insights ad una Web App tramite Azure ARM
- Elencare le foto catturate con Windows 8.1
- #netfx4 reliability update 1: bug fixing, supporto ad #html5 in #aspnet4. lista: http://aspitalia.com/ze, download: http://aspitalia.com/zd
- Utilizzare angular-cli per creare un progetto Angular 2
- Generare un hash con SHA-3 in .NET
- Utilizzare le direttive ng-bind e ng-model con AngularJS
- Visualizzare un header in uno ScrollViewer nelle Universal App
- rilasciata la beta dell'SDK di #netmf compatibile con #vs2013 https://aspit.co/axu #iot