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.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:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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..af3b307 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;
@@ -15,34 +17,45 @@ public override void Initialize()
AvaloniaXamlLoader.Load(this);
}
- public async override void OnFrameworkInitializationCompleted()
+ public override async void OnFrameworkInitializationCompleted()
{
- var services = new ServiceCollection();
- services.AddNavigationSupport()
- .AddSingleton()
+ try
+ {
+ var services = new ServiceCollection();
+#pragma warning disable IL2026
+ services
+ .AddNavigationSupport()
+ .AddSingletonWitAllMembers()
+#pragma warning restore IL2026
.RegisterDialogWindow("DialogWindow");
- var sp = services.BuildServiceProvider();
+
+ var sp = services.BuildServiceProvider();
- var dialogService = sp.GetRequiredService();
- await dialogService.FrontShowWindowAsync("DialogWindow", result =>
- {
- if (result.Result == AsyncNavigation.Core.DialogButtonResult.Done)
+ var dialogService = sp.GetRequiredService();
+ 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;
- }
- });
- base.OnFrameworkInitializationCompleted();
+ });
+ base.OnFrameworkInitializationCompleted();
+ }
+ catch (Exception e)
+ {
+ Debug.WriteLine(e);
+ }
}
}
\ 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/samples/Sample.InfinityNavigation/App.axaml.cs b/samples/Sample.InfinityNavigation/App.axaml.cs
index 33605ac..2127064 100644
--- a/samples/Sample.InfinityNavigation/App.axaml.cs
+++ b/samples/Sample.InfinityNavigation/App.axaml.cs
@@ -1,10 +1,8 @@
using AsyncNavigation.Abstractions;
using Avalonia;
-using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using Microsoft.Extensions.DependencyInjection;
-using ReactiveUI;
using Sample.Common;
using Sample.InfinityNavigation.Views;
@@ -20,8 +18,10 @@ public override void Initialize()
public override void OnFrameworkInitializationCompleted()
{
var services = new ServiceCollection();
+#pragma warning disable IL2026
services.AddNavigationSupport()
.RegisterView(nameof(InfinityView));
+#pragma warning restore IL2026
var sp = services.BuildServiceProvider();
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/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);
+ }
}
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)
{