Blazor WebAssembly 3.2.0 معاينة 1 متاحة الآن

قمنا اليوم بإصدار تحديث معاينة جديد لـ Blazor WebAssembly مع العديد من الميزات والتحسينات الجديدة الرائعة.

إليك الميزات الجديدة في هذا الإصدار:

  • تم تحديث الإصدار إلى 3.2.
  • إطلاق مبسط
  • تحسينات حجم التحميل
  • دعم عميل .NET SignalR



بداية


لبدء استخدام Blazor WebAssembly 3.2.0 Preview 1 ،  قم بتثبيت .NET Core 3.1 SDK  ثم قم بتشغيل الأمر التالي:

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

هذا كل شئ! يمكنك العثور على مستندات وأمثلة إضافية على  https://blazor.net .

تحديث المشروع الحالي


لترقية تطبيق Blazor WebAssembly الموجود من 3.1.0 Preview 4 إلى 3.2.0 Preview 1:

  • قم بتحديث كافة الارتباطات لحزم Microsoft.AspNetCore.Blazor * إلى 3.2.0 معاينة 1.20073.1.
  • في  Program.cs  في مشروع عميل Blazor WebAssembly ، استبدل  BlazorWebAssemblyHost.CreateDefaultBuilder() بـ  WebAssemblyHostBuilder.CreateDefault().
  • انقل تسجيلات المكون الجذر في مشروع عميل Blazor WebAssembly من  Startup.Configure إلى  Program.cs عن طريق  الاتصال  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


في هذا الإصدار ، قمنا بترقية إصدارات حزمة Blazor WebAssembly إلى 3.2 لتمييزها عن الإصدار الأخير من .NET Core 3.1 Long Term Support (LTS). لا يوجد إصدار مقابل من .NET Core 3.2 - الإصدار الجديد 3.2 ينطبق فقط على Blazor WebAssembly. يعتمد Blazor WebAssembly حاليًا على .NET Core 3.1 ، ولكنه لا يرث حالة .NET Core 3.1 LTS. بدلاً من ذلك ، سيكون الإصدار الأولي من Blazor WebAssembly ، المقرر إجراؤه في مايو من هذا العام ، هو Current ، والذي يتم "الاحتفاظ به لمدة ثلاثة أشهر بعد الإصدار التالي من Current أو LTS" ، كما هو موضح في سياسة دعم Core .NET . الإصدار القادم القادم من Blazor WebAssembly بعد الإصدار 3.2 في مايو سيكون مع .NET 5. هذا يعني أنه بعد إصدار .NET 5 ، ستحتاج إلى ترقية تطبيقات Blazor WebAssembly إلى .NET 5 لدعمه.

إطلاق مبسط


في هذا الإصدار ، قمنا بتبسيط إطلاق واستضافة واجهات برمجة التطبيقات لـ Blazor WebAssembly. في البداية ، تم تصميم واجهات برمجة التطبيقات الخاصة بالإطلاق والنشر لـ Blazor WebAssembly لتعكس الأنماط المستخدمة في ASP.NET Core ، ولكن لم تكن جميع المفاهيم ذات صلة. تسمح واجهات برمجة التطبيقات المحدثة أيضًا باستخدام بعض السيناريوهات الجديدة.

إليك ما يبدو عليه رمز بدء التشغيل الجديد في 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();
    }
}

تدعم تطبيقات Blazor WebAssembly Mainالأساليب غير المتزامنة لنقطة الإدخال إلى التطبيق.

لإنشاء مضيف افتراضي ، اتصل WebAssemblyHostBuilder.CreateDefault(). يتم تكوين مكونات وخدمات الجذر باستخدام رابط ؛ Startupلم تعد هناك حاجة لفصل منفصل . تمت إضافة المثال التالي WeatherService، لذلك فهو متاح من خلال حقن التبعية (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();
    }
}

بعد إنشاء المضيف ، يمكنك الوصول إلى الخدمات من جذر 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");

        var host = builder.Build();

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

        await host.RunAsync();
    }
}

يوفر المضيف أيضًا الآن مثيل التكوين المركزي للتطبيق. لا يتم ملء التكوين بأي بيانات افتراضية ، ولكن يمكنك ملؤه كما هو مطلوب في تطبيقك.

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

تحسينات حجم التحميل


تقوم تطبيقات Blazor WebAssembly بتشغيل رابط .NET IL في كل تجميع لإزالة التعليمات البرمجية غير المستخدمة من التطبيق. في الإصدارات السابقة ، تم قطع مكتبات الإطار الرئيسية فقط. بدءًا من هذا الإصدار ، يتم أيضًا قطع تجميعات Blazor ، مما يؤدي إلى انخفاض طفيف في الحجم - حوالي 100 كيلوبايت. كما كان من قبل ، إذا احتجت في أي وقت إلى تعطيل الربط ، فأضف الرابط الخاص بك <BlazorLinkOnBuild>false</BlazorLinkOnBuild> إلى ملف المشروع.

دعم عميل .NET SignalR


يمكنك الآن استخدام SignalR من تطبيقات Blazor WebAssembly باستخدام عميل .NET SignalR.

لتجربة SignalR في تطبيق Blazor WebAssembly:

  1. إنشاء تطبيق Blazor WebAssembly مستضاف على ASP.NET Core.

    dotnet new blazorwasm -ho -o BlazorSignalRApp
  2. إضافة حزمة عميل ASP.NET Core SignalR إلى مشروع العميل .

    cd BlazorSignalRApp
    dotnet add Client package Microsoft.AspNetCore.SignalR.Client
  3. في مشروع الخادم ، أضف فئة 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. في مشروع الخادم ، أضف خدمات SignalR في الطريقة Startup.ConfigureServices.

    services.AddSignalR();
    
  5. أضف أيضًا نقطة النهاية لـ ChatHubat Startup.Configure.

    .UseEndpoints(endpoints =>
    {
        endpoints.MapDefaultControllerRoute();
        endpoints.MapHub<ChatHub>("/chatHub");
        endpoints.MapFallbackToClientSideBlazor<Client.Program>("index.html");
    });
    
  6. قم بتحديث Pages / Index.razor في مشروع العميل بالترميز التالي.

    @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. إنشاء مشروع خادم وتشغيله

    cd Server
    dotnet run
    
  8. افتح التطبيق في علامتي تبويب منفصلتين للمتصفح للتواصل في الوقت الحقيقي من خلال SignalR.

مشاكل معروفة


فيما يلي قائمة بالمشكلات المعروفة في هذا الإصدار والتي سيتم إصلاحها في التحديث المستقبلي.

  • يؤدي بدء تطبيق Blazor WebAssembly المستضاف على ASP.NET Core من سطر الأوامر إلى إنشاء تحذير:

    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.
    
    • الحل: يمكن تجاهل هذا التحذير أو إزالته باستخدام خاصية  <DisableImplicitComponentsAnalyzers>true</DisableImplicitComponentsAnalyzers> MSBuild.

المراجعات


نأمل أن تستمتع بالميزات الجديدة في إصدار المعاينة هذا من Blazor WebAssembly! يُرجى إخبارنا برأيك عند الإبلاغ عن المشكلات على GitHub .

شكرا لاستخدام Blazor.

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


All Articles