Recentemente è stata rilasciata la versione di Blazor WebAssembly 3.2.

Nell’articolo “Introduzione ad ASP.NET Core Blazor” abbiamo già parlato di Blazor WebAssembly e delle sue potenzialità.

In questo articolo scopriamo le novità introdotte da questa release accompagnate dal relativo codice di esempio.

Tra le principali novità vi sono:

  • Avvio semplificato;
  • Riduzione delle dimensioni del pacchetto per il download;
  • Supporto per .NET SignalR Client;

Avvio semplificato

In questo rilascio sono state semplificate le API di avvio e di hosting per Blazor WebAssembly. Inizialmente queste erano progettate per rispecchiare i modelli già presenti di ASP.NET Core ma ci si è resi conto che non tutti i modelli erano necessari.

Come si vede dal codice seguente, in fase di avvio le applicazioni Blazor WebAssembly supportano i metodi asincroni.

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.RootComponents.Add<App>("app");

        await builder.Build().RunAsync();
    }

}

E’ possibile anche creare un host predefinito utilizzando il metodo WebAssemblyHostBuilder.CreateDefault (). I componenti e i servizi di root possono essere configurati usando il builder e non è più necessaria una classe di avvio separata. Il codice seguente aggiunge il servizio WeatherService tramite dependency injection.

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");

        await builder.Build().RunAsync();
    }
}

Una volta creato l’host, è possibile accedere ai servizi tramite la Dependency Injection della radice prima che tutti i componenti siano stati renderizzati. Ciò può essere utile se è necessario eseguire una logica di inizializzazione prima di eseguire il rendering dei componenti.

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");

        var host = builder.Build();

        var weatherService = host.Services.GetRequiredService<WeatherService>();
        await weatherService.InitializeWeatherAsync();

        await host.RunAsync();
    }
}

L’host fornisce così un’istanza di configurazione centrale per l’applicazione. La configurazione non viene popolata con nessun dato per impostazione predefinita ma può essere popolata su richiesta all’interno dell’applicazione.

public class Program
{
    public static async Task Main(string[] args)
    {
        var builder = WebAssemblyHostBuilder.CreateDefault(args);
        builder.Services.AddSingleton<WeatherService>();
        builder.RootComponents.Add<App>("app");

        var host = builder.Build();

        var weatherService = host.Services.GetRequiredService<WeatherService>();
        await weatherService.InitializeWeatherAsync(host.Configuration["WeatherServiceUrl"]);

        await host.RunAsync();
    }
}

Riduzione delle dimensioni del pacchetto per il download

Le applicazioni Blazor WebAssembly eseguono il linker .NET IL ad ogni build per eliminare il codice inutilizzato. Nelle versioni precedenti venivano tagliate solo le librerie del framework principale. A partire da questa versione, vengono eliminate anche le librerie inutilizzate del framework Blazor, con una conseguente riduzione delle dimensioni di circa 100 KB. Come in precedenza è possibile disattivare il collegamento impostando la proprietà BlazorLinkOnBuild su false.

Anche se si tratta di un’anteprima, la versione WebAssembly si preannuncia ricca di novità e non ci resta che attendere la versione definitiva prevista per maggio di quest’anno.