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
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Aggiungere interattività lato server in Blazor 8
Definire stili a livello di libreria in Angular
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Ottimizzare le pull con Artifact Cache di Azure Container Registry
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Paginare i risultati con QuickGrid in Blazor
Eseguire script pre e post esecuzione di un workflow di GitHub
Usare le navigation property in QuickGrid di Blazor
Estrarre dati randomici da una lista di oggetti in C#
Migliorare i tempi di risposta di GPT tramite lo streaming endpoint in ASP.NET Core
Creare una custom property in GitHub