Поделиться через


ASP.NET Core Blazor Hybrid

Примечание.

Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.

Предупреждение

Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.

Внимание

Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

В текущем выпуске см . версию .NET 9 этой статьи.

В этой статье приводятся сведения об использовании ASP.NET Core Blazor Hybrid для создания интерактивного клиентского веб-интерфейса с помощью .NET в приложении ASP.NET Core.

Используйте Blazor Hybrid для объединения настольных и мобильных собственных клиентских платформ с .NET и Blazor.

В приложении Blazor Hybrid компоненты Razor выполняются нативно на устройстве. Компоненты выполняют отрисовку во встроенном элементе управления Web View через локальный канал взаимодействия. Компоненты не выполняются в браузере, и WebAssembly не задействуется. Компоненты Razor быстро загружают и выполняют код,а компоненты имеют полный доступ к собственным возможностям устройства через платформу .NET. Стили компонентов, отображаемые в зависимости Web View от платформы, могут потребовать учета различий между платформами с помощью пользовательских таблиц стилей.

В статье Blazor Hybrid рассмотрены темы, касающиеся интеграции компонентов Razor в нативные клиентские платформы.

Blazor Hybrid приложения с .NET MAUI

Поддержка Blazor Hybrid встроена в платформу .NET Multi-platform App UI (.NET MAUI). .NET MAUI включает элемент управления BlazorWebView, которые разрешает отрисовку компонентов Razor во встроенном Web View. Благодаря совместному использованию .NET MAUI и Blazor вы можете повторно использовать один набор компонентов веб-интерфейса на мобильных, настольных устройствах и в Интернете.

Приложения Blazor Hybrid с WPF и Windows Forms

Приложения Blazor Hybrid можно создавать с помощью Windows Presentation Foundation (WPF) и Windows Forms. Blazor предоставляет BlazorWebView элементы управления для обеих этих платформ (WPF BlazorWebView, Windows Forms BlazorWebView). Компоненты Razor выполняются изначально на настольных компьютерах Windows и отрисовываются во встроенном Web View. Использование Blazor в WPF и Windows Forms позволяет вам добавлять новый пользовательский интерфейс в существующие классические приложения Windows, которые можно повторно использовать на платформах с .NET MAUI или в Интернете.

Web ViewКонфигурация

Blazor Hybrid предоставляет базовую конфигурацию Web View для разных платформ с помощью событий элемента управления BlazorWebView:

  • BlazorWebViewInitializing предоставляет доступ к параметрам, используемым для создания Web View на каждой платформе, если параметры доступны.
  • BlazorWebViewInitialized предоставляет доступ к Web View для дальнейшей настройки параметров.

Используйте предпочтительные шаблоны на каждой платформе, чтобы подключить обработчики событий к событиям и выполнить ваш код.

Документация по API:

Необработанные исключения в приложениях Windows Forms и WPF

Этот раздел относится только к приложениям Windows Forms и WPF Blazor Hybrid .

Создайте обратный вызов для UnhandledException System.AppDomain.CurrentDomain свойства. В следующем примере используется директива компилятора для отображения MessageBox того, что пользователь уведомляет пользователя об ошибке или отображает сведения об ошибке для разработчика. Зайдите в журнал сведений об error.ExceptionObjectошибке.

AppDomain.CurrentDomain.UnhandledException += (sender, error) =>
{
#if DEBUG
    MessageBox.Show(text: error.ExceptionObject.ToString(), caption: "Error");
#else
    MessageBox.Show(text: "An error has occurred.", caption: "Error");
#endif
    
    // Log the error information (error.ExceptionObject)
};

Глобализация и локализация

Этот раздел относится только к приложениям .NET MAUIBlazor Hybrid.

.NET MAUI настраивает CurrentCulture и CurrentUICulture основывается на внешних данных устройства.

IStringLocalizer и другие API в Microsoft.Extensions.Localization пространстве имен обычно работают должным образом, а также форматирование глобализации, синтаксический анализ и привязка, которая зависит от языка и региональных параметров пользователя.

При динамическом изменении языка и региональных параметров приложения во время выполнения приложение должно быть перезагружено, чтобы отразить изменение языка и региональных параметров, которое заботится о перерисовке корневого компонента и передаче нового языка и региональных параметров в rerendered дочерних компонентов.

. Система ресурсов NET поддерживает внедрение локализованных образов (как больших двоичных объектов) в приложение, но Blazor Hybrid в настоящее время не может отображать внедренные образы в Razor компонентах. Даже если пользователь считывает байты изображения в Stream использование ResourceManager, платформа в настоящее время не поддерживает отрисовку полученного изображения в компоненте Razor .

Подход, характерный для конкретной платформы для включения локализованных изображений , является функцией. Система ресурсов NET, но Razor элементы браузера компонента в .NET MAUIBlazor Hybrid приложении не могут взаимодействовать с такими изображениями.

Дополнительные сведения см. на следующих ресурсах:

Доступ к службам с областью действия из собственного пользовательского интерфейса

BlazorWebView имеет метод, который вызывает указанный TryDispatchAsync асинхронно и передает в ограниченные Action<ServiceProvider> службы, доступные в Razor компонентах. Это позволяет коду из собственного пользовательского интерфейса получать доступ к службам с областью действия, таким как NavigationManager:

private async void MyMauiButtonHandler(object sender, EventArgs e)
{
    var wasDispatchCalled = await _blazorWebView.TryDispatchAsync(sp =>
    {
        var navMan = sp.GetRequiredService<NavigationManager>();
        navMan.CallSomeNavigationApi(...);
    });

    if (!wasDispatchCalled)
    {
        ...
    }
}

В wasDispatchCalled этом falseслучае рассмотрите, что делать, если вызов не был отправлен. Как правило, диспетчер не должен завершиться ошибкой. При сбое ресурсы ОС могут быть исчерпаны. Если ресурсы исчерпаны, рассмотрите возможность ведения журнала сообщения, создание исключения и, возможно, оповещение пользователя.

Дополнительные ресурсы