diff --git a/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs b/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs index 74068fe..a2bd6d4 100644 --- a/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs +++ b/Toolkit.Avalonia/ClassicDesktopStyleApplicationHandler.cs @@ -6,7 +6,7 @@ using Toolkit.Foundation; namespace Toolkit.Avalonia; public class ClassicDesktopStyleApplicationHandler : - INavigateHandler + INotificationHandler> { public Task Handle(NavigateEventArgs args) { diff --git a/Toolkit.Avalonia/ContentControlHandler.cs b/Toolkit.Avalonia/ContentControlHandler.cs index a71c8d0..b14046f 100644 --- a/Toolkit.Avalonia/ContentControlHandler.cs +++ b/Toolkit.Avalonia/ContentControlHandler.cs @@ -5,7 +5,7 @@ using Toolkit.Foundation; namespace Toolkit.Avalonia; public class ContentControlHandler : - INavigateHandler + INotificationHandler> { public async Task Handle(NavigateEventArgs args) { @@ -19,11 +19,6 @@ public class ContentControlHandler : control.Loaded -= HandleLoaded; if (control.DataContext is object content) { - if (content is IInitialization initializer) - { - await initializer.Initialize(); - } - if (content is IActivated activated) { await activated.OnActivated(); diff --git a/Toolkit.Avalonia/ContentDialogHandler.cs b/Toolkit.Avalonia/ContentDialogHandler.cs index 7529e80..da049b5 100644 --- a/Toolkit.Avalonia/ContentDialogHandler.cs +++ b/Toolkit.Avalonia/ContentDialogHandler.cs @@ -5,7 +5,7 @@ using Toolkit.UI.Controls.Avalonia; namespace Toolkit.Avalonia; public class ContentDialogHandler(IDispatcher dispatcher) : - INavigateHandler + INotificationHandler> { public async Task Handle(NavigateEventArgs args) { diff --git a/Toolkit.Avalonia/FrameHandler.cs b/Toolkit.Avalonia/FrameHandler.cs index 273f861..d8d32ce 100644 --- a/Toolkit.Avalonia/FrameHandler.cs +++ b/Toolkit.Avalonia/FrameHandler.cs @@ -8,8 +8,8 @@ using Toolkit.UI.Controls.Avalonia; namespace Toolkit.Avalonia; public class FrameHandler : - INavigateHandler, - INavigateBackHandler + INotificationHandler>, + INotificationHandler> { public Task Handle(NavigateEventArgs args) { diff --git a/Toolkit.Avalonia/SingleViewApplicationHandler.cs b/Toolkit.Avalonia/SingleViewApplicationHandler.cs index 45825a7..0156dcf 100644 --- a/Toolkit.Avalonia/SingleViewApplicationHandler.cs +++ b/Toolkit.Avalonia/SingleViewApplicationHandler.cs @@ -6,7 +6,7 @@ using Toolkit.Foundation; namespace Toolkit.Avalonia; public class SingleViewApplicationHandler : - INavigateHandler + INotificationHandler> { public Task Handle(NavigateEventArgs args) { diff --git a/Toolkit.Foundation/ContentFactory.cs b/Toolkit.Foundation/ContentFactory.cs index 6c4b35a..f4359ae 100644 --- a/Toolkit.Foundation/ContentFactory.cs +++ b/Toolkit.Foundation/ContentFactory.cs @@ -25,7 +25,13 @@ public class ContentFactory(IMediator mediator, initialization.Initialize(); } }, parameters) - : provider.GetRequiredKeyedService(descriptor.ContentType, descriptor.Key); + : provider.GetRequiredKeyedService(descriptor.ContentType, args => + { + if (args is IInitialization initialization) + { + initialization.Initialize(); + } + }, descriptor.Key); return content; } diff --git a/Toolkit.Foundation/INavigateBackHandler.cs b/Toolkit.Foundation/INavigateBackHandler.cs deleted file mode 100644 index db65a69..0000000 --- a/Toolkit.Foundation/INavigateBackHandler.cs +++ /dev/null @@ -1,5 +0,0 @@ -namespace Toolkit.Foundation; - -public interface INavigateBackHandler : - INotificationHandler>, - INavigateHandler; \ No newline at end of file diff --git a/Toolkit.Foundation/INavigateHandler.cs b/Toolkit.Foundation/INavigateHandler.cs deleted file mode 100644 index b6c5ee6..0000000 --- a/Toolkit.Foundation/INavigateHandler.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Toolkit.Foundation; - -public interface INavigateHandler; - -public interface INavigateHandler : - INotificationHandler>, - INavigateHandler; \ No newline at end of file diff --git a/Toolkit.Foundation/IServiceProviderExtensions.cs b/Toolkit.Foundation/IServiceProviderExtensions.cs new file mode 100644 index 0000000..b32a901 --- /dev/null +++ b/Toolkit.Foundation/IServiceProviderExtensions.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Toolkit.Foundation; + +public static class IServiceProviderExtensions +{ + public static object GetRequiredKeyedService(this IServiceProvider provider, + Type serviceType, + Action serviceDelegate, + object? serviceKey) + { + object service = provider.GetRequiredKeyedService(serviceType, serviceKey); + serviceDelegate.Invoke(service); + + return service; + } +} diff --git a/Toolkit.Foundation/NavigationScope.cs b/Toolkit.Foundation/NavigationScope.cs index c124928..31c173d 100644 --- a/Toolkit.Foundation/NavigationScope.cs +++ b/Toolkit.Foundation/NavigationScope.cs @@ -96,7 +96,7 @@ public class NavigationScope(IServiceProvider provider, Type navigateType = typeof(NavigateBackEventArgs<>).MakeGenericType(navigationType); if (Activator.CreateInstance(navigateType, [region]) is object navigate) { - publisher.Publish(navigate); + publisher.Publish(navigate, navigationType.Name); } } } diff --git a/Toolkit.Foundation/ObservableCollection.cs b/Toolkit.Foundation/ObservableCollection.cs index 38e959a..95283d6 100644 --- a/Toolkit.Foundation/ObservableCollection.cs +++ b/Toolkit.Foundation/ObservableCollection.cs @@ -403,7 +403,7 @@ public partial class ObservableCollection : IsCompatibleObject(value) ? IndexOf((TItem)value!) : -1; - public Task Initialize() + public virtual Task Initialize() { if (Initialized) {