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
Recuperare l'ultima versione di una release di GitHub
Aprire una finestra di dialogo per selezionare una directory in WPF e .NET 8
Rendere i propri workflow e le GitHub Action utilizzate più sicure
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Loggare le query più lente con Entity Framework
Escludere alcuni file da GitHub Secret Scanning
Estrarre dati randomici da una lista di oggetti in C#
Proteggere le risorse Azure con private link e private endpoints
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Disabilitare automaticamente un workflow di GitHub (parte 2)