Blazor WebAssembly 3.2.0 Preview 1 ya est谩 disponible

Hoy lanzamos una nueva actualizaci贸n de vista previa para Blazor WebAssembly con muchas nuevas funciones y mejoras.

Estas son las novedades de esta versi贸n:

  • Versi贸n actualizada a 3.2.
  • Lanzamiento simplificado
  • Descargar mejoras de tama帽o
  • .NET SignalR Client Support



comienzo


Para comenzar con Blazor WebAssembly 3.2.0 Preview 1,  instale .NET Core 3.1 SDK  y luego ejecute el siguiente comando:

dotnet new -i Microsoft.AspNetCore.Blazor.Templates::3.2.0-preview1.20073.1

隆Eso es todo! Puede encontrar documentos y ejemplos adicionales en  https://blazor.net .

Actualizar proyecto existente


Para actualizar una aplicaci贸n Blazor WebAssembly existente de 3.1.0 Vista previa 4 a 3.2.0 Vista previa 1:

  • Actualice todos los enlaces a los paquetes Microsoft.AspNetCore.Blazor * a 3.2.0-preview1.20073.1.
  • En  Program.cs  en el proyecto del cliente Blazor WebAssembly, reemplace  BlazorWebAssemblyHost.CreateDefaultBuilder() con  WebAssemblyHostBuilder.CreateDefault().
  • Mover los registros de componentes de la ra铆z en el proyecto de cliente Blazor WebAssembly a partir  Startup.Configure de  Program.cs por  llamar  builder.RootComponents.Add<TComponent>( ).
  • Blazor WebAssembly  Startup.ConfigureServices  Program.cs   builder.Services.
  •  Startup.cs  Blazor WebAssembly client project.
  • Blazor WebAssembly ASP.NET Core,  Server   app.UseClientSideBlazorFiles<Client.Startup>(...)  app.UseClientSideBlazorFiles<Client.Program>(...).

3.2


En esta versi贸n, actualizamos las versiones del paquete Blazor WebAssembly a 3.2 para distinguirlas de la versi贸n reciente de .NET Core 3.1 Long Term Support (LTS). No hay una versi贸n correspondiente de .NET Core 3.2: la nueva versi贸n 3.2 se aplica solo a Blazor WebAssembly. Blazor WebAssembly se basa actualmente en .NET Core 3.1, pero no hereda el estado de .NET Core 3.1 LTS. En cambio, la versi贸n inicial de Blazor WebAssembly, programada para mayo de este a帽o, ser谩 Actual , que se "mantiene durante tres meses despu茅s de la pr贸xima versi贸n de Actual o LTS", como se describe en la Pol铆tica de soporte de .NET Core . La pr贸xima versi贸n pr贸xima de Blazor WebAssembly despu茅s de la versi贸n 3.2 en mayo ser谩 con .NET 5. Esto significa que despu茅s del lanzamiento de .NET 5, deber谩 actualizar sus aplicaciones Blazor WebAssembly a .NET 5 para admitirlo.

Lanzamiento simplificado


En esta versi贸n, hemos simplificado el lanzamiento y el alojamiento de las API para Blazor WebAssembly. Inicialmente, las API de lanzamiento e implementaci贸n de Blazor WebAssembly se dise帽aron para reflejar los patrones utilizados en ASP.NET Core, pero no todos los conceptos eran relevantes. Las API actualizadas tambi茅n permiten utilizar algunos escenarios nuevos.

As铆 es como se ve el nuevo c贸digo de inicio en Program.cs :

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

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

Las aplicaciones Blazor WebAssembly ahora admiten Mainm茅todos asincr贸nicos para el punto de entrada a la aplicaci贸n.

Para crear un host predeterminado, llame WebAssemblyHostBuilder.CreateDefault(). Los componentes y servicios ra铆z se configuran utilizando el enlazador; Startupya no se necesita una clase separada . Se agrega el siguiente ejemplo WeatherService, por lo que est谩 disponible a trav茅s de la inyecci贸n de dependencia (DI):

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();
    }
}

Despu茅s de crear el host, puede acceder a los servicios desde el DI ra铆z antes de presentar cualquier componente. Esto puede ser 煤til si necesita ejecutar alguna l贸gica de inicializaci贸n antes de que se muestre algo:

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();
    }
}

El host ahora tambi茅n proporciona una instancia de la configuraci贸n central de la aplicaci贸n. La configuraci贸n no se rellena con ning煤n dato predeterminado, pero puede rellenarla seg煤n sea necesario en su aplicaci贸n.

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();
    }
}

Descargar mejoras de tama帽o


Las aplicaciones Blazor WebAssembly ejecutan el enlazador .NET IL en cada ensamblaje para eliminar el c贸digo no utilizado de la aplicaci贸n. En versiones anteriores, solo se cortaban las bibliotecas principales de framework. A partir de esta versi贸n, los ensamblajes Blazor tambi茅n se recortan, lo que resulta en una ligera reducci贸n de tama帽o, alrededor de 100 KB. Como antes, si alguna vez necesita deshabilitar el enlace, agregue el suyo propio <BlazorLinkOnBuild>false</BlazorLinkOnBuild> a su archivo de proyecto.

.NET SignalR Client Support


Ahora puede usar SignalR desde sus aplicaciones Blazor WebAssembly usando el cliente .NET SignalR.

Para probar SignalR en su aplicaci贸n Blazor WebAssembly:

  1. Cree una aplicaci贸n Blazor WebAssembly alojada en ASP.NET Core.

    dotnet new blazorwasm -ho -o BlazorSignalRApp
  2. Agregue el paquete del cliente ASP.NET Core SignalR al proyecto del Cliente .

    cd BlazorSignalRApp
    dotnet add Client package Microsoft.AspNetCore.SignalR.Client
  3. En el proyecto Servidor , agregue la siguiente clase Hub / ChatHub.cs .

    using System.Threading.Tasks;
    using Microsoft.AspNetCore.SignalR;
    
    namespace BlazorSignalRApp.Server.Hubs
    {
        public class ChatHub : Hub
        {
            public async Task SendMessage(string user, string message)
            {
                await Clients.All.SendAsync("ReceiveMessage", user, message);
            }
        }
    }
    
  4. En el proyecto Servidor , agregue los servicios SignalR en el m茅todo Startup.ConfigureServices.

    services.AddSignalR();
    
  5. Agregue tambi茅n el punto final para ChatHubat Startup.Configure.

    .UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapHub<ChatHub>("/chatHub");
        endpoints.MapFallbackToClientSideBlazor<Client.Program>("index.html");
    });
    
  6. Actualice Pages / Index.razor en el proyecto del Cliente con el siguiente marcado.

    @using Microsoft.AspNetCore.SignalR.Client
    @page "/"
    @inject NavigationManager NavigationManager
    
    <div>
        <label for="userInput">User:</label>
        <input id="userInput" @bind="userInput" />
    </div>
    <div class="form-group">
        <label for="messageInput">Message:</label>
        <input id="messageInput" @bind="messageInput" />
    </div>
    <button @onclick="Send" disabled="@(!IsConnected)">Send Message</button>
    
    <hr />
    
    <ul id="messagesList">
        @foreach (var message in messages)
        {
            <li>@message</li>
        }
    </ul>
    
    @code {
        HubConnection hubConnection;
        List<string> messages = new List<string>();
        string userInput;
        string messageInput;
    
        protected override async Task OnInitializedAsync()
        {
            hubConnection = new HubConnectionBuilder()
                .WithUrl(NavigationManager.ToAbsoluteUri("/chatHub"))
                .Build();
    
            hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
            {
                var encodedMsg = user + " says " + message;
                messages.Add(encodedMsg);
                StateHasChanged();
            });
    
            await hubConnection.StartAsync();
        }
    
        Task Send() => hubConnection.SendAsync("SendMessage", userInput, messageInput);
    
        public bool IsConnected => hubConnection.State == HubConnectionState.Connected;
    }
    
  7. Crear y ejecutar un proyecto de servidor

    cd Server
    dotnet run
    
  8. Abra la aplicaci贸n en dos pesta帽as separadas del navegador para comunicarse en tiempo real a trav茅s de SignalR.

Problemas conocidos


La siguiente es una lista de problemas conocidos en esta versi贸n que se solucionar谩n en una actualizaci贸n futura.

  • Al iniciar una nueva aplicaci贸n Blazor WebAssembly alojada en ASP.NET Core desde la l铆nea de comandos, se genera una advertencia:

    CSC : warning CS8034: Unable to load Analyzer assembly C:\Users\user\.nuget\packages\microsoft.aspnetcore.components.analyzers\3.1.0\analyzers\dotnet\cs\Microsoft.AspNetCore.Components.Analyzers.dll : Assembly with same name is already loaded.
    
    • Soluci贸n: esta advertencia se puede ignorar o eliminar mediante la propiedad  <DisableImplicitComponentsAnalyzers>true</DisableImplicitComponentsAnalyzers> MSBuild.

Comentarios


隆Esperamos que disfrute de las nuevas funciones en esta versi贸n preliminar de Blazor WebAssembly! Por favor, h谩ganos saber lo que piensa al informar problemas en GitHub .

Gracias por usar Blazor.

Source: https://habr.com/ru/post/undefined/


All Articles