Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Vous pouvez étendre par programme la prise en charge du rechargement à chaud .NET pour des scénarios supplémentaires qui ne sont généralement pas pris en charge, tels que les modifications de code qui nécessitent l’effacement d’un cache ou l’actualisation de l’interface utilisateur. Par exemple, pour prendre en charge le rechargement à chaud avec un sérialiseur JSON, vous devez effacer son cache lorsqu’un type est modifié. Pour les développeurs MAUI .NET, vous devrez peut-être étendre le rechargement à chaud pour les modifications/mises à jour qui ne déclenchent pas de rechargement à chaud dans des conditions normales, telles que la modification d’un constructeur ou un gestionnaire d’événements pour un élément d’interface utilisateur. Vous pouvez utiliser l’option MetadataUpdateHandlerAttribute pour actualiser l’état de l’application, déclencher un nouveau rendu de l’interface utilisateur ou effectuer des actions similaires.
Le type spécifié par cet attribut doit implémenter des méthodes statiques correspondant à la signature d’un ou plusieurs des éléments suivants :
static void ClearCache(Type[]? updatedTypes)
static void UpdateApplication(Type[]? updatedTypes)
ClearCache permet aux gestionnaires de mises à jour d’effacer les caches déduits en fonction des métadonnées de l’application. Une fois toutes les ClearCache méthodes appelées, UpdateApplication est invoqué pour chaque gestionnaire qui en spécifie un. Vous pouvez utiliser UpdateApplication pour actualiser l’interface utilisateur.
Example
L’exemple suivant montre un scénario pour un projet .NET MAUI qui ne prend pas initialement en charge le rechargement à chaud, mais prend ensuite en charge la fonctionnalité après l’implémentation MetadataUpdateHandler.
Tester le rechargement à chaud .NET
Créez un projet .NET MAUI dans Visual Studio. Choisissez le modèle de projet d’application .NET MAUI .
Dans App.xaml.cs, remplacez le code pour créer mainPage par le code suivant :
//MainPage = new MainPage(); // Template default code MainPage = new NavigationPage(new MainPage());Ensuite, vous implémentez une méthode Build pour simplifier une mise à jour de l’interface utilisateur en C#. Cette méthode définit le
ContentPage.Contentet est appelée dans laOnNavigatedTode la page. L’événementOnNavigatedTodoit être hébergé dans Shell ou dans navigationPage.Dans MainPage.xaml.cs, remplacez le code du
MainPageconstructeur par le code suivant :public MainPage() { InitializeComponent(); Build(); } void Build() => Content = new Label { Text = "First line\nSecond line" }; protected override void OnNavigatedTo(NavigatedToEventArgs args) { base.OnNavigatedTo(args); Build(); }Appuyez sur F5 pour démarrer l’application.
Une fois la page chargée, remplacez le texte de l’étiquette dans le code C# par quelque chose comme : « Première ligne\nDeuxième ligne\nTroisième ligne »
Sélectionnez le bouton Rechargement à chaud
.Le texte mis à jour ne s’affiche pas dans l’application en cours d’exécution. Par défaut, il n’existe aucune prise en charge du rechargement à chaud pour ce scénario.
Ajouter le MetadataUpdateHandler
Dans une application .NET MAUI, vous devez effectuer quelque chose pour réexécuter le code de l’interface utilisateur C# après avoir apporté une modification de code. Si votre code d'interface utilisateur est écrit en C#, vous pouvez utiliser la méthode UpdateApplication dans MetadataUpdateHandler pour recharger l'interface utilisateur. Pour configurer cela, ajoutez HotReloadService.cs à votre application à l’aide du code suivant.
#if DEBUG
[assembly: System.Reflection.Metadata.MetadataUpdateHandlerAttribute(typeof(YourAppNamespace.HotReloadService))]
namespace YourAppNamespace {
public static class HotReloadService
{
#pragma warning disable CS8632 // The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.
public static event Action<Type[]?>? UpdateApplicationEvent;
#pragma warning restore CS8632 // The annotation for nullable reference types should only be used in code within a '#nullable' annotations context.
internal static void ClearCache(Type[]? types) { }
internal static void UpdateApplication(Type[]? types) {
UpdateApplicationEvent?.Invoke(types);
}
}
}
#endif
Veillez à remplacer YourAppNamespace par l’espace de noms de la page que vous ciblez.
Maintenant, avec le code précédemment ajouté, lorsque vous modifiez du code en direct dans Visual Studio, une modification des métadonnées se produit et l’application déclenche le UpdateApplicationEvent. Vous devez donc ajouter du code pour inscrire l’événement et effectuer la mise à jour de l’interface utilisateur.
Note
Pour ce scénario, le rechargement à chaud XAML doit être activé.
Dans MainPage.xaml.cs, ajoutez du code pour inscrire le UpdateApplicationEvent gestionnaire d’événements dans l’événement OnNavigatedTo .
protected override void OnNavigatedTo(NavigatedToEventArgs args)
{
base.OnNavigatedTo(args);
Build();
#if DEBUG
HotReloadService.UpdateApplicationEvent += ReloadUI;
#endif
}
Désinscrivez le gestionnaire d’événements, OnNavigatedFrom puis ajoutez du code pour gérer l’événement et réexécutez l’appel à Build.
protected override void OnNavigatedFrom(NavigatedFromEventArgs args)
{
base.OnNavigatedFrom(args);
#if DEBUG
HotReloadService.UpdateApplicationEvent -= ReloadUI;
#endif
}
private void ReloadUI(Type[] obj)
{
MainThread.BeginInvokeOnMainThread(() =>
{
Build();
});
}
À présent, démarrez l’application. Lorsque vous apportez une modification au texte de l’étiquette dans votre code C# et que vous appuyez sur le bouton "Hot Reload", l’interface utilisateur est actualisée.