MetadataUpdateHandler kullanarak .NET Çalışırken Yeniden Yükleme genişletme (C#, Visual Basic)
Önbelleği temizlemeyi veya kullanıcı arabirimini yenilemeyi gerektiren kod değişiklikleri gibi normalde desteklenmeyen ek senaryolar için .NET Çalışırken Yeniden Yükleme desteğini program aracılığıyla genişletebilirsiniz. Örneğin, bir JSON seri hale getiricisi ile sık erişimli yeniden yüklemeyi desteklemek için, bir tür değiştirildiğinde önbelleğini temizlemeniz gerekir. .NET MAUI geliştiricileri için, bir oluşturucuyu düzenleme veya kullanıcı arabirimi öğesi için olay işleyicisi gibi normal koşullarda sık erişimli yeniden yüklemeyi tetiklemeyen düzenlemeler/güncelleştirmeler için sık erişimli yeniden yüklemeyi genişletmeniz gerekebilir. uygulamasını kullanarak MetadataUpdateHandlerAttribute uygulama durumunu yenileyebilir, kullanıcı arabiriminin yeniden işlenmesini tetikleyebilir veya benzer eylemler gerçekleştirebilirsiniz.
Bu öznitelik tarafından belirtilen tür, aşağıdakilerden birinin veya daha fazlasının imzası ile eşleşen statik yöntemler uygulamalıdır:
static void ClearCache(Type[]? updatedTypes)
static void UpdateApplication(Type[]? updatedTypes)
ClearCache
güncelleştirme işleyicilerine, uygulamanın meta verilerine göre çıkarsanan tüm önbellekleri temizleme fırsatı verir. Tüm ClearCache
yöntemler çağrıldıktan sonra, UpdateApplication
birini belirten her işleyici için çağrılır. Kullanıcı arabirimini yenilemek için kullanabilirsiniz UpdateApplication
.
Örnek
Aşağıdaki örnekte başlangıçta sık erişimli yeniden yüklemeyi desteklemeyen ancak uygulandıktan MetadataUpdateHandler
sonra özelliği destekleyen bir .NET MAUI projesi senaryosu gösterilmektedir.
.NET Çalışırken Yeniden Yükleme test edin
Visual Studio'da yeni bir .NET MAUI projesi oluşturun. .NET MAUI Uygulaması proje şablonunu seçin.
App.xaml.cs mainpage oluşturmak için kodu aşağıdaki kodla değiştirin:
//MainPage = new MainPage(); // Template default code MainPage = new NavigationPage(new MainPage());
Ardından, C# dilinde kullanıcı arabirimi güncelleştirmesini basitleştirmek için bir Derleme yöntemi uygulayacaksınız. Bu yöntem ve öğesini ayarlar
ContentPage.Content
ve sayfanınOnNavigatedTo
içinde çağrılır. OlayınOnNavigatedTo
Shell veya NavigationPage içinde barındırılması gerekir.MainPage.xaml.cs oluşturucu kodunu aşağıdaki kodla değiştirin
MainPage
:public MainPage() { InitializeComponent(); Build(); } void Build() => Content = new Label { Text = "First line\nSecond line" }; protected override void OnNavigatedTo(NavigatedToEventArgs args) { base.OnNavigatedTo(args); Build(); }
Uygulamayı başlatmak için F5 tuşuna basın.
Sayfa yüklendikten sonra, C# kodundaki etiket metnini şu şekilde değiştirin: "İlk satır\nSaniye satırı\nThird satırı"
Çalışırken Yeniden Yükleme düğmesini seçin.
Güncelleştirilmiş metin çalışan uygulamada görüntülenmez. Bu senaryo için varsayılan olarak Çalışırken Yeniden Yükleme desteği yoktur.
MetadataUpdateHandler'i ekleme
.NET MAUI uygulamasında, kod değişikliği yaptıktan sonra C# kullanıcı arabirimi kodunu yeniden çalıştırmak için bir şey yapmanız gerekir. Kullanıcı arabirimi kodunuz C# dilinde yazılmışsa, kullanıcı arabirimini UpdateApplication
yeniden yüklemek için içindeki MetadataUpdateHandler
yöntemini kullanabilirsiniz. Bunu ayarlamak için aşağıdaki kodu kullanarak uygulamanıza HotReloadService.cs ekleyin.
#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
öğesini hedeflediğiniz sayfanın ad alanıyla değiştirdiğinizden YourAppNamespace
emin olun.
Önceki kod eklendiğinde, Visual Studio'da canlı kodu düzenlediğinizde bir meta veri değişikliği gerçekleşir ve uygulama tarafından UpdateApplicationEvent
gönderilir. Bu nedenle, olayı kaydetmek ve kullanıcı arabirimi güncelleştirmesini gerçekleştirmek için kod eklemeniz gerekir.
Not
Bu senaryo için XAML Çalışırken Yeniden Yükleme etkinleştirilmelidir.
MainPage.xaml.cs olay işleyicisini UpdateApplicationEvent
OnNavigatedTo
olaya kaydetmek için kod ekleyin.
protected override void OnNavigatedTo(NavigatedToEventArgs args)
{
base.OnNavigatedTo(args);
Build();
#if DEBUG
HotReloadService.UpdateApplicationEvent += ReloadUI;
#endif
}
içindeki olay işleyicisinin OnNavigatedFrom
aboneliğini kaldırın ve ardından olayı işlemek için kod ekleyin ve çağrısının yeniden yürütülmesini sağlayın Build
.
protected override void OnNavigatedFrom(NavigatedFromEventArgs args)
{
base.OnNavigatedFrom(args);
#if DEBUG
HotReloadService.UpdateApplicationEvent -= ReloadUI;
#endif
}
private void ReloadUI(Type[] obj)
{
MainThread.BeginInvokeOnMainThread(() =>
{
Build();
});
}
Şimdi uygulamayı başlatın. C# kodunuzda etiket metninde değişiklik yaptığınızda ve Çalışırken Yeniden Yükleme düğmesine bastığınızda kullanıcı arabirimi yenilenir!