ASP.NET Core Blazor Hybrid

Remarque

Ceci n’est pas la dernière version de cet article. Pour la version actuelle, consultez la version .NET 8 de cet article.

Important

Ces informations portent sur la préversion du produit, qui est susceptible d’être en grande partie modifié avant sa commercialisation. Microsoft n’offre aucune garantie, expresse ou implicite, concernant les informations fournies ici.

Pour la version actuelle, consultez la version .NET 8 de cet article.

Cet article décrit ASP.NET Core Blazor Hybrid, un moyen de créer une interface utilisateur web interactive côté client à l’aide de .NET dans une application ASP.NET Core.

Utilisez Blazor Hybrid pour combiner des infrastructures clientes natives de bureau et mobiles avec .NET et Blazor.

Dans une application Blazor Hybrid, les composants Razor s’exécutent en mode natif sur l’appareil. Les composants affichent dans un contrôle Web View incorporé via un canal d’interopérabilité local. Les composants ne s’exécutent pas dans le navigateur et WebAssembly n’est pas impliqué. Les composants Razor chargent et exécutent rapidement du code, et les composants ont un accès complet aux fonctionnalités natives de l’appareil via la plateforme .NET. Les styles de composants rendus dans un Web View sont dépendants de la plateforme et peuvent vous obliger à prendre en compte les différences de rendu entre les plateformes à l’aide de feuilles de style personnalisées.

Les articles sur Blazor Hybrid couvrent des sujets relatifs à l’intégration des composants Razor dans les infrastructures clientes natives.

Applications Blazor Hybrid avec .NET MAUI

La prise en charge de Blazor Hybrid est intégrée à l’infrastructure .NET Multi-platform App UI (.NET MAUI). .NET MAUI inclut le contrôle BlazorWebView qui autorise le rendu des composants Razor dans un élément Web View incorporé. En utilisant .NET MAUI et Blazor ensemble, vous pouvez réutiliser un ensemble de composants d’interface utilisateur web sur les composants mobiles, de bureau et web.

Applications Blazor Hybrid avec WPF et Windows Forms

Les applications Blazor Hybrid peuvent être générées avec Windows Presentation Foundation (WPF) et Windows Forms. Blazor fournit des contrôles BlazorWebView pour ces deux infrastructures (WPF BlazorWebView, Windows Forms BlazorWebView). Les composants Razor s’exécutent en mode natif sur le bureau Windows et affichent sur un élément Web View incorporé. L’utilisation de Blazor dans WPF et Windows Forms vous permet d’ajouter une nouvelle interface utilisateur à vos applications de bureau Windows existantes, qui peut être réutilisée sur des plateformes avec .NET MAUI ou sur le web.

Configuration Web View

Blazor Hybrid expose la configuration Web View sous-jacente pour différentes plateformes par le biais d’événements du contrôle BlazorWebView :

  • BlazorWebViewInitializing fournit l’accès aux paramètres utilisés pour créer l’élément Web View sur chaque plateforme, si ces paramètres sont disponibles.
  • BlazorWebViewInitialized fournit l’accès à l’élément Web View pour permettre de poursuivre la configuration des paramètres.

Utilisez les modèles préférés sur chaque plateforme pour attacher des gestionnaires d’événements aux événements afin d’exécuter votre code personnalisé.

Documentation sur l’API :

Exceptions non prise en charge dans les applications Windows Forms et WPF

Cette section s’applique uniquement aux Blazor Hybridapplications Windows Forms et WPF.

Créez un rappel pour UnhandledException sur la propriété System.AppDomain.CurrentDomain. L’exemple suivant utilise une directive de compilateur pour afficher un MessageBox qui avertit l’utilisateur qu’une erreur s’est produite ou affiche les informations d’erreur au développeur. Consignez les informations d’erreur dans 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)
};

Globalisation et localisation

Cette section s’applique uniquement aux applications .NET MAUIBlazor Hybrid.

.NET MAUI configure le CurrentCulture et le CurrentUICulture en fonction des informations ambiantes de l’appareil.

IStringLocalizer et d’autres API de l’espace de noms Microsoft.Extensions.Localization fonctionnent généralement comme prévu, ainsi que le formatage, l’analyse et la liaison de globalisation qui s’appuient sur la culture de l’utilisateur.

Lors de la modification dynamique de la culture de l’application au moment de l’exécution, l’application doit être rechargée pour refléter le changement de culture, ce qui permet d’afficher le composant racine et la transmission de la nouvelle culture aux composants enfants re-rendus.

Le système de ressources .NET prend en charge l’incorporation d’images localisées (en tant qu’objets blob) dans une application, mais Blazor Hybrid ne peut pas afficher les images incorporées dans les composants Razor pour le moment. Même si un utilisateur lit les octets d’une image dans un Stream à l’aide de ResourceManager, l’infrastructure ne prend actuellement pas en charge le rendu de l’image récupérée dans un composantRazor.

Une approche spécifique à la plateforme pour inclure des images localisées est une fonctionnalité du système de ressources .NET, mais les éléments de navigateur d’un composant Razor dans une application .NET MAUIBlazor Hybrid ne sont pas en mesure d’interagir avec de telles images.

Pour plus d’informations, consultez les ressources suivantes :

Accédez aux services délimités à partir de l’interface utilisateur native

BlazorWebView a une méthode TryDispatchAsync qui appelle une méthode Action<ServiceProvider> spécifiée de manière asynchrone et transmet les services délimités disponibles dans les composants Razor. Cela permet au code de l’interface utilisateur native d’accéder aux services délimités tels que NavigationManager :

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

    if (!wasDispatchCalled)
    {
        ...
    }
}

Quand wasDispatchCalled est false, pensez à ce qu’il faut faire si l’appel n’a pas été distribué. En règle générale, la distribution ne doit pas échouer. En cas d’échec, les ressources du système d’exploitation peuvent être épuisées. Si les ressources sont épuisées, envisagez de journaliser un message, de lever une exception et peut-être d’alerter l’utilisateur.

Ressources supplémentaires