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
Estendere Microsoft 365 Copilot con .NET
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Sfruttare i KeyedService in un'applicazione Blazor in .NET 8
Sviluppare un'interfaccia utente in React con Tailwind CSS e Preline UI
Utilizzare QuickGrid di Blazor con Entity Framework
Gestire domini wildcard in Azure Container Apps
Miglioramenti nell'accessibilità con Angular CDK
Disabilitare automaticamente un workflow di GitHub (parte 2)
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Le novità di Entity Framework 8
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core