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
Eseguire script pre e post esecuzione di un workflow di GitHub
Recuperare l'ultima versione di una release di GitHub
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Creare un'applicazione React e configurare Tailwind CSS
Utilizzare la funzione EF.Parameter per forzare la parametrizzazione di una costante con Entity Framework
Sostituire la GitHub Action di login su private registry
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Disabilitare automaticamente un workflow di GitHub
Gestire la cancellazione di una richiesta in streaming da Blazor
Modificare i metadati nell'head dell'HTML di una Blazor Web App
I più letti di oggi
- Simulare Azure Cosmos DB in locale con Docker
- Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- .NET Conference Italia 2024 - Milano
- .NET Conference Italia 2023 - Milano e Online