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
Miglioramenti nelle performance di Angular 16
Routing statico e PreRendering in una Blazor Web App
Creare un'applicazione React e configurare Tailwind CSS
Eseguire una query su SQL Azure tramite un workflow di GitHub
C# 12: Cosa c'è di nuovo e interessante
Gestione degli stili CSS con le regole @layer
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
.NET Conference Italia 2023
Hosting di componenti WebAssembly in un'applicazione Blazor static
Triggerare una pipeline su un altro repository di Azure DevOps
Eseguire le GitHub Actions offline
Cancellare una run di un workflow di GitHub