From 8e6d5e9313eaa43f6ad0634334735259aabc2a5b Mon Sep 17 00:00:00 2001 From: Easley Date: Wed, 26 Nov 2025 11:02:10 +0800 Subject: [PATCH 1/4] Resolve the warning update nuget fix di of IRouter --- samples/Sample.Avalonia.iOS/AppDelegate.cs | 7 +--- samples/Sample.Common/MainWindowViewModel.cs | 16 +++++--- samples/Sample.FrontDialog/App.axaml.cs | 40 ++++++++++++------- samples/Sample.FrontDialog/MainWindow.axaml | 23 ++++++----- .../Sample.FrontDialog.csproj | 2 +- .../DependencyInjectionExtensions.cs | 3 +- src/AsyncNavigation/NavigationOptions.cs | 10 +++++ 7 files changed, 65 insertions(+), 36 deletions(-) diff --git a/samples/Sample.Avalonia.iOS/AppDelegate.cs b/samples/Sample.Avalonia.iOS/AppDelegate.cs index 27151a8..454a6a7 100644 --- a/samples/Sample.Avalonia.iOS/AppDelegate.cs +++ b/samples/Sample.Avalonia.iOS/AppDelegate.cs @@ -1,10 +1,7 @@ -using Avalonia; -using Avalonia.Controls; +using Avalonia; using Avalonia.iOS; -using Avalonia.Media; -using Avalonia.ReactiveUI; using Foundation; -using UIKit; +using ReactiveUI.Avalonia; namespace Sample.Avalonia.iOS { diff --git a/samples/Sample.Common/MainWindowViewModel.cs b/samples/Sample.Common/MainWindowViewModel.cs index 6132b9f..8a0d515 100644 --- a/samples/Sample.Common/MainWindowViewModel.cs +++ b/samples/Sample.Common/MainWindowViewModel.cs @@ -15,12 +15,12 @@ public partial class MainWindowViewModel : ViewModelBase private readonly IRegionManager _regionManager; private readonly IDialogService _dialogService; private readonly IRegistrationTracker _registrationTracker; - private readonly IRouter _router; + private readonly IRouter? _router; public MainWindowViewModel(IRegionManager regionManager, IDialogService dialogService, IRegistrationTracker registrationTracker, - IRouter router) + IRouter? router = null) { _router = router; _regionManager = regionManager; @@ -35,16 +35,22 @@ public MainWindowViewModel(IRegionManager regionManager, }); Views = _registrationTracker.TryGetViews(out var views) ? [.. views] : []; - foreach (var mappedNavigation in _router.Routes) + + if (_router is not null) { - Views.Add(mappedNavigation.Path); + foreach (var mappedNavigation in _router.Routes) + { + Views.Add(mappedNavigation.Path); + } + Views.Add("/Tab/Tab_A"); } - Views.Add("/Tab/Tab_A"); this.WhenAnyValue(vm => vm.SelectedView) .WhereNotNull() .Subscribe(target => { + /// If the target starts with "/", we consider it a path navigation. + /// This logic can be customized based on your routing conventions. if (target.StartsWith("/",StringComparison.OrdinalIgnoreCase)) { AsyncPathNavigateAndForget(target); diff --git a/samples/Sample.FrontDialog/App.axaml.cs b/samples/Sample.FrontDialog/App.axaml.cs index d63d76d..7fe1735 100644 --- a/samples/Sample.FrontDialog/App.axaml.cs +++ b/samples/Sample.FrontDialog/App.axaml.cs @@ -5,6 +5,8 @@ using Avalonia.Markup.Xaml; using Microsoft.Extensions.DependencyInjection; using Sample.Common; +using System; +using System.Diagnostics; namespace Sample.FrontDialog; @@ -19,30 +21,38 @@ public async override void OnFrameworkInitializationCompleted() { var services = new ServiceCollection(); services.AddNavigationSupport() - .AddSingleton() + .AddSingletonWitAllMembers() .RegisterDialogWindow("DialogWindow"); + var sp = services.BuildServiceProvider(); var dialogService = sp.GetRequiredService(); - await dialogService.FrontShowWindowAsync("DialogWindow", result => + try { - if (result.Result == AsyncNavigation.Core.DialogButtonResult.Done) + await dialogService.FrontShowWindowAsync("DialogWindow", result => { - var win = new MainWindow + if (result.Result == AsyncNavigation.Core.DialogButtonResult.Done) { - DataContext = sp.GetRequiredService() - }; - return win; - } - else - { - if (Current?.ApplicationLifetime is IControlledApplicationLifetime applicationLifetime) + var win = new MainWindow + { + DataContext = sp.GetRequiredService() + }; + return win; + } + else { - applicationLifetime.Shutdown(); + if (Current?.ApplicationLifetime is IControlledApplicationLifetime applicationLifetime) + { + applicationLifetime.Shutdown(); + } + return null; } - return null; - } - }); + }); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + } base.OnFrameworkInitializationCompleted(); } } \ No newline at end of file diff --git a/samples/Sample.FrontDialog/MainWindow.axaml b/samples/Sample.FrontDialog/MainWindow.axaml index 10784a0..1b9e11e 100644 --- a/samples/Sample.FrontDialog/MainWindow.axaml +++ b/samples/Sample.FrontDialog/MainWindow.axaml @@ -1,10 +1,15 @@ - - I am the MainWindow + + I am the MainWindow diff --git a/samples/Sample.FrontDialog/Sample.FrontDialog.csproj b/samples/Sample.FrontDialog/Sample.FrontDialog.csproj index 99d1ab0..f9fd751 100644 --- a/samples/Sample.FrontDialog/Sample.FrontDialog.csproj +++ b/samples/Sample.FrontDialog/Sample.FrontDialog.csproj @@ -22,7 +22,7 @@ None All - + diff --git a/src/AsyncNavigation/DependencyInjectionExtensions.cs b/src/AsyncNavigation/DependencyInjectionExtensions.cs index 7e45101..08f72cb 100644 --- a/src/AsyncNavigation/DependencyInjectionExtensions.cs +++ b/src/AsyncNavigation/DependencyInjectionExtensions.cs @@ -79,7 +79,8 @@ private static IServiceCollection RegisterViewModelAndView( + private static IServiceCollection RegisterDialogWindowInternal<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]TWindow, + [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TViewModel>( this IServiceCollection services, string windowName, Func? viewModelBuilder = null) diff --git a/src/AsyncNavigation/NavigationOptions.cs b/src/AsyncNavigation/NavigationOptions.cs index e98204f..a317038 100644 --- a/src/AsyncNavigation/NavigationOptions.cs +++ b/src/AsyncNavigation/NavigationOptions.cs @@ -145,4 +145,14 @@ public override bool Equals(object? obj) } return base.Equals(obj); } + public override int GetHashCode() + { + return HashCode.Combine( + MaxCachedViews, + MaxHistoryItems, + MaxReplayItems, + LoadingIndicatorDelay, + NavigationJobStrategy, + NavigationJobScope); + } } From 3a94b8191183a5bdc4ba8c61ac6ce40b8b427b8b Mon Sep 17 00:00:00 2001 From: Easley Date: Wed, 26 Nov 2025 11:15:03 +0800 Subject: [PATCH 2/4] aot infinitydemo resolve warning --- .../Sample.InfinityNavigation.csproj | 7 ++++++- tests/AsyncNavigation.Tests/Mocks/Dummy.cs | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/samples/Sample.InfinityNavigation/Sample.InfinityNavigation.csproj b/samples/Sample.InfinityNavigation/Sample.InfinityNavigation.csproj index 86cc1c1..01576a7 100644 --- a/samples/Sample.InfinityNavigation/Sample.InfinityNavigation.csproj +++ b/samples/Sample.InfinityNavigation/Sample.InfinityNavigation.csproj @@ -5,8 +5,13 @@ enable true app.manifest + true + true + + + true + true - diff --git a/tests/AsyncNavigation.Tests/Mocks/Dummy.cs b/tests/AsyncNavigation.Tests/Mocks/Dummy.cs index e0141d2..a010273 100644 --- a/tests/AsyncNavigation.Tests/Mocks/Dummy.cs +++ b/tests/AsyncNavigation.Tests/Mocks/Dummy.cs @@ -9,7 +9,7 @@ public class DummyNavigationView : IView } public class DummyNavigationViewModel : INavigationAware { - public event AsyncEventHandler AsyncRequestUnloadEvent; + public event AsyncEventHandler? AsyncRequestUnloadEvent; public Task InitializeAsync(NavigationContext context) { From 56d652071e5cc7129a732d1e35b0b36a13880ad4 Mon Sep 17 00:00:00 2001 From: Easley Date: Wed, 26 Nov 2025 14:56:52 +0800 Subject: [PATCH 3/4] suppress warnings --- samples/Sample.Avalonia/Views/EView.axaml | 73 +++++++++---------- samples/Sample.FrontDialog/App.axaml.cs | 22 +++--- .../Sample.InfinityNavigation/App.axaml.cs | 2 + 3 files changed, 50 insertions(+), 47 deletions(-) diff --git a/samples/Sample.Avalonia/Views/EView.axaml b/samples/Sample.Avalonia/Views/EView.axaml index 5e02aa4..15be08e 100644 --- a/samples/Sample.Avalonia/Views/EView.axaml +++ b/samples/Sample.Avalonia/Views/EView.axaml @@ -1,51 +1,50 @@  - - + + - - - - InstanceNumber: - + + + + InstanceNumber: - -