La Dependency Injection è una pratica fondamentale nel panorama moderno, e con Blazor essa è ben strutturata all'interno della classe Program.cs.
public static async Task Main(string[] args) { ... builder.Services.AddScoped.AddScoped<IMyService,MyService>(); ... }
Impostata la regola di creazione possiamo recuperare un istanza del servizio utilizzando la keyword Inject
@inject IMyService Service
Le cose si complicano però quando vogliamo creare una classe base per i nostri componenti, in cui iniettare la dipendenza tramite costruttore:
public class BaseCustomComponent: ComponentBase { IMyService _service; public BaseCustomComponent(IMyService service){ _service = service; } }
Infatti un oggetto di questo tipo non è utilizzabile direttamente come classe base a causa dei parametri nel costruttore:
@* Errore, la classe base non prevede un costruttore senza parametri *@ @inherits BaseCustomComponent
Per evitarlo è necessario utilizzare l'attributo [Inject], in questo modo sarà il runtime a gestire automaticamente la risoluzione delle dipendenze
public class BaseCustomComponent : ComponentBase { [Inject] public IMyService Service { get; set; } }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Le novità di Angular: i miglioramenti alla CLI
Disabilitare automaticamente un workflow di GitHub (parte 2)
La gestione della riconnessione al server di Blazor in .NET 9
Creare una libreria CSS universale - Rotazione degli elementi
Utilizzare una qualunque lista per i parametri di tipo params in C#
Miglioramenti nelle performance di Angular 16
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Gestione dei nomi con le regole @layer in CSS
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework
Proteggere le risorse Azure con private link e private endpoints
Effettuare il refresh dei dati di una QuickGrid di Blazor