Blazor WebAssembly 3.2.0 Preview 1 sekarang tersedia

Hari ini kami merilis pembaruan pratinjau baru untuk Blazor WebAssembly dengan banyak fitur dan peningkatan baru.

Inilah yang baru dalam rilis ini:

  • Versi diperbarui menjadi 3,2.
  • Peluncuran yang disederhanakan
  • Unduh Peningkatan Ukuran
  • Dukungan Klien .NET SignalR



Mulailah


Untuk memulai dengan Blazor WebAssembly 3.2.0 Preview 1,  instal .NET Core 3.1 SDK  dan kemudian jalankan perintah berikut:

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

Itu saja! Anda dapat menemukan dokumen dan contoh tambahan di  https://blazor.net .

Perbarui proyek yang ada


Untuk memutakhirkan aplikasi Blazor WebAssembly yang ada dari 3.1.0 Pratinjau 4 menjadi 3.2.0 Pratinjau 1:

  • Perbarui semua tautan ke paket Microsoft.AspNetCore.Blazor * ke 3.2.0-preview1.20073.1.
  • Dalam  Program.cs  di proyek klien Blazor WebAssembly, ganti  BlazorWebAssemblyHost.CreateDefaultBuilder() dengan  WebAssemblyHostBuilder.CreateDefault().
  • Pindahkan pendaftaran komponen root di proyek klien Blazor WebAssembly dari  Startup.Configure ke  Program.cs dengan  menelepon  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


Dalam rilis ini, kami meningkatkan versi paket Blazor WebAssembly ke 3.2 untuk membedakannya dari rilis .NET Core 3.1 Long Term Support (LTS) baru-baru ini. Tidak ada rilis yang sesuai dari .NET Core 3.2 - versi baru 3.2 hanya berlaku untuk Blazor WebAssembly. Blazor WebAssembly saat ini didasarkan pada .NET Core 3.1, tetapi tidak mewarisi status .NET Core 3.1 LTS. Sebagai gantinya, rilis awal Blazor WebAssembly, dijadwalkan untuk bulan Mei tahun ini, akan menjadi Lancar , yang "dipertahankan selama tiga bulan setelah rilis Lancar atau LTS berikutnya," sebagaimana dijelaskan dalam Kebijakan Dukungan Inti .NET . Rilis Blazor WebAssembly berikutnya yang akan datang setelah rilis 3.2 pada bulan Mei adalah dengan .NET 5. Ini berarti bahwa setelah rilis. NET 5, Anda harus memutakhirkan aplikasi Blazor WebAssembly Anda ke .NET 5 untuk mendukungnya.

Peluncuran yang disederhanakan


Dalam rilis ini, kami telah menyederhanakan peluncuran dan hosting API untuk Blazor WebAssembly. Awalnya, API peluncuran dan penyebaran untuk Blazor WebAssembly dirancang untuk mencerminkan pola yang digunakan dalam ASP.NET Core, tetapi tidak semua konsep relevan. API yang diperbarui juga memungkinkan beberapa skenario baru untuk digunakan.

Seperti apa kode startup baru di 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();
    }
}

Aplikasi Blazor WebAssembly sekarang mendukung Mainmetode asinkron untuk titik masuk ke aplikasi.

Untuk membuat host default, panggil WebAssemblyHostBuilder.CreateDefault(). Komponen dan layanan root dikonfigurasikan menggunakan tautan; kelas yang terpisah Startuptidak lagi dibutuhkan. Contoh berikut ditambahkan WeatherService, sehingga tersedia melalui injeksi dependensi (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();
    }
}

Setelah host dibuat, Anda dapat mengakses layanan dari root DI sebelum komponen disajikan. Ini dapat berguna jika Anda perlu menjalankan beberapa logika inisialisasi sebelum sesuatu ditampilkan:

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

Tuan rumah juga sekarang menyediakan contoh konfigurasi pusat untuk aplikasi. Konfigurasi tidak diisi dengan data default apa pun, tetapi Anda dapat mengisinya seperti yang diperlukan dalam aplikasi Anda.

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

Unduh Peningkatan Ukuran


Aplikasi Blazor WebAssembly menjalankan .NET IL linker di setiap unit untuk menghapus kode yang tidak digunakan dari aplikasi. Dalam rilis sebelumnya, hanya perpustakaan kerangka kerja utama yang terputus. Dimulai dengan rilis ini, majelis Blazor juga dipangkas, menghasilkan sedikit pengurangan ukuran - sekitar 100 KB. Seperti sebelumnya, jika Anda perlu menonaktifkan binding, tambahkan file Anda sendiri <BlazorLinkOnBuild>false</BlazorLinkOnBuild> ke file proyek Anda.

Dukungan Klien .NET SignalR


Sekarang Anda dapat menggunakan SignalR dari aplikasi Blazor WebAssembly Anda menggunakan klien .NET SignalR.

Untuk mencoba SignalR di aplikasi Blazor WebAssembly Anda:

  1. Buat aplikasi Blazor WebAssembly yang dihosting di ASP.NET Core.

    dotnet new blazorwasm -ho -o BlazorSignalRApp
  2. Tambahkan paket klien ASP.NET Core SignalR ke proyek Klien .

    cd BlazorSignalRApp
    dotnet add Client package Microsoft.AspNetCore.SignalR.Client
  3. Dalam proyek Server , tambahkan kelas Hub / ChatHub.cs berikut .

    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. Dalam proyek Server , tambahkan layanan SignalR dalam metode Startup.ConfigureServices.

    services.AddSignalR();
    
  5. Tambahkan juga titik akhir untuk ChatHubdi Startup.Configure.

    .UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapHub<ChatHub>("/chatHub");
        endpoints.MapFallbackToClientSideBlazor<Client.Program>("index.html");
    });
    
  6. Perbarui Halaman / Index.razor dalam proyek Klien dengan markup berikut.

    @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. Buat dan jalankan proyek Server

    cd Server
    dotnet run
    
  8. Buka aplikasi dalam dua tab browser terpisah untuk berkomunikasi secara real time melalui SignalR.

Masalah Dikenal


Berikut ini adalah daftar masalah yang diketahui dalam rilis ini yang akan diperbaiki pada pembaruan di masa mendatang.

  • Memulai aplikasi WebAssembly Blazor baru yang dihosting di ASP.NET Core dari baris perintah menghasilkan peringatan:

    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.
    
    • Solusi: Peringatan ini dapat diabaikan atau dihapus menggunakan properti  <DisableImplicitComponentsAnalyzers>true</DisableImplicitComponentsAnalyzers> MSBuild.

Ulasan


Kami harap Anda menikmati fitur-fitur baru dalam versi pratinjau Blazor WebAssembly ini! Beri tahu kami pendapat Anda saat melaporkan masalah pada GitHub .

Terima kasih telah menggunakan Blazor.

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


All Articles