Quando si sviluppano classi come controller, manager, service, utility e altro ancora, una delle operazioni più comuni è quella di iniettare le dipendenze. Prima di C# 12, le uniche possibilità per iniettare queste dipendenze era usare un costruttore o le proprietà. Un esempio che sfrutta il costruttore è visibile nel prossimo snippet.
public class MyController { IService1 _service1; IService2 _service2; public MyController(IService1 service1, IService2 service2) { _service1 = service1; _service2 = service2; } public string MyAction() { return this.service1.MyMethod(); } }
A partire dalla versione 12, C# permette di semplificare l'utilizzo dell'injection tramite costruttore aggiungendo la possibilità di avere nelle classi un primary constructor esattamente come avviene per i record. Guardiamo prima il seguente esempio.
public class MyController(IService1 service1, IService2 service2) { public string MyAction() { return service1.MyMethod(); } }
La prima cosa da notare è che il primary constructor può essere solo uno e, se dichiarato, deve essere creato non come metodo, ma come dichiarazione dopo il nome della classe. La seconda cosa importante è che i parametri del primary constructor vengono catturati dal compilatore, ma diventano membri privati della classe (non sono accessibili tramite this, ma solo col nome dell'istanza. Questo permette di usare i parametri del primary constructor all'interno del nostro codice come si nota nel metodo MyAction dove viene usato service1.
Grazie a questa sintassi, che si ispira a quella dei record, il codice si accorcia notevolmente in quanto non dobbiamo né definire le variabili private né il corpo del costruttore dove assegnamo i parametri alle variabili private.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Ottimizzazione dei block template in Angular 17
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Il nuovo controllo Range di Blazor 9
Gestire gli accessi con Token su Azure Container Registry
Generare un hash con SHA-3 in .NET
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Generare velocemente pagine CRUD in Blazor con QuickGrid
La gestione della riconnessione al server di Blazor in .NET 9
Effettuare il refresh dei dati di una QuickGrid di Blazor
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
I più letti di oggi
- Validazione automatica dei parametri in Web API con ASP.NET Core 2.1
- Recuperare i file utilizzati di recente in un'Universal App
- Applicare un'animazione al contenuto di un ContentControl nella Universal Windows Platform
- AI&ML Conference 2019 - Milano
- .NET Serverless Day - Online
- Rilasciata la versione Beta 2 di Silverlight 2.0