Dependency injection nei componenti di Blazor

di Morgan Pizzini, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi