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
Implementare l'infinite scroll con QuickGrid in Blazor Server
Rinnovare il token di una GitHub App durante l'esecuzione di un workflow
Change tracking e composition in Entity Framework
Definire stili a livello di libreria in Angular
Miglioramenti agli screen reader e al contrasto in Angular
Gestire la cancellazione di una richiesta in streaming da Blazor
Utilizzare Azure AI Studio per testare i modelli AI
Aggiornare a .NET 9 su Azure App Service
Usare lo spread operator con i collection initializer in C#
Ottimizzare le performance delle collection con le classi FrozenSet e FrozenDictionary
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Utilizzare QuickGrid di Blazor con Entity Framework