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
Usare una container image come runner di GitHub Actions
Paginare i risultati con QuickGrid in Blazor
Utilizzare database e servizi con gli add-on di Container App
Mascherare l'output di un valore all'interno dei log di un workflow di GitHub
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Usare Refit e Polly in Blazor per creare client affidabili e fortemente tipizzati
Creare form tipizzati con Angular
Effettuare il binding di date in Blazor
Utilizzare politiche di resiliency con Azure Container App
Gestire liste di tipi semplici con Entity Framework Core
Verificare la provenienza di un commit tramite le GitHub Actions