From 4c8fd3dae44b03928e813af55e9dc152639b8859 Mon Sep 17 00:00:00 2001 From: Daniel Clark Date: Fri, 9 Dec 2022 08:58:26 +0000 Subject: [PATCH] Add some initial navigation route handlers --- .../Extensions/IHostBuilderExtensions.cs | 4 +- .../IServiceCollectionExtensions.cs | 9 +- .../Markups/NavigateExtension.cs | 81 ++++++++--------- .../Markups/NavigationRouteExtension.cs | 80 +++++++++-------- .../Navigation/ContentControlHandler.cs | 19 ---- .../Navigation/ContentControlNavigation.cs | 14 +++ .../ContentControlNavigationHandler.cs | 19 ++++ .../Navigation/ContentDialogHandler.cs | 52 ----------- .../Navigation/ContentDialogNavigation.cs | 15 ++++ .../ContentDialogNavigationHandler.cs | 53 +++++++++++ .../Navigation/FrameHandler.cs | 33 ------- .../Navigation/FrameNavigation.cs | 15 ++++ .../Navigation/FrameNavigationHandler.cs | 33 +++++++ .../Navigation/INavigationRouteHandler.cs | 9 -- .../Navigation/NavigateBackHandler.cs | 38 ++++++++ ...NavigationRouter.cs => NavigateHandler.cs} | 88 +++++-------------- .../Navigation/Navigation.cs | 27 ++++++ .../Navigation/NavigationRouteHandler.cs | 38 +++++++- .../Navigation/NavigationRouteRequest.cs | 31 ------- .../Properties/Assembly.cs | 3 + .../IServiceCollectionExtensions.cs | 10 ++- .../Extensions/IServiceFactoryExtensions.cs | 7 +- .../Navigation/INavigationRouter.cs | 9 -- Toolkit.Foundation/Navigation/Navigate.cs | 6 +- Toolkit.Foundation/Navigation/NavigateBack.cs | 7 +- .../Navigation/NavigateHandler.cs | 18 ---- .../Navigation/NavigationRoute.cs | 6 ++ .../Services/IServiceFactory.cs | 4 +- Toolkit.Foundation/Services/ServiceCreator.cs | 2 +- Toolkit.Foundation/Services/ServiceFactory.cs | 8 +- .../Templates/NamedDataTemplateFactory.cs | 2 +- .../Templates/NamedTemplateFactory.cs | 2 +- .../Templates/TemplateFactory.cs | 2 +- .../Templates/TypedDataTemplateFactory.cs | 2 +- 34 files changed, 403 insertions(+), 343 deletions(-) delete mode 100644 Toolkit.Foundation.Avalonia/Navigation/ContentControlHandler.cs create mode 100644 Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigation.cs create mode 100644 Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigationHandler.cs delete mode 100644 Toolkit.Foundation.Avalonia/Navigation/ContentDialogHandler.cs create mode 100644 Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigation.cs create mode 100644 Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigationHandler.cs delete mode 100644 Toolkit.Foundation.Avalonia/Navigation/FrameHandler.cs create mode 100644 Toolkit.Foundation.Avalonia/Navigation/FrameNavigation.cs create mode 100644 Toolkit.Foundation.Avalonia/Navigation/FrameNavigationHandler.cs delete mode 100644 Toolkit.Foundation.Avalonia/Navigation/INavigationRouteHandler.cs create mode 100644 Toolkit.Foundation.Avalonia/Navigation/NavigateBackHandler.cs rename Toolkit.Foundation.Avalonia/Navigation/{NavigationRouter.cs => NavigateHandler.cs} (51%) create mode 100644 Toolkit.Foundation.Avalonia/Navigation/Navigation.cs delete mode 100644 Toolkit.Foundation.Avalonia/Navigation/NavigationRouteRequest.cs create mode 100644 Toolkit.Foundation.Avalonia/Properties/Assembly.cs delete mode 100644 Toolkit.Foundation/Navigation/INavigationRouter.cs delete mode 100644 Toolkit.Foundation/Navigation/NavigateHandler.cs create mode 100644 Toolkit.Foundation/Navigation/NavigationRoute.cs diff --git a/Toolkit.Foundation.Avalonia/Extensions/IHostBuilderExtensions.cs b/Toolkit.Foundation.Avalonia/Extensions/IHostBuilderExtensions.cs index 6905859..68249f1 100644 --- a/Toolkit.Foundation.Avalonia/Extensions/IHostBuilderExtensions.cs +++ b/Toolkit.Foundation.Avalonia/Extensions/IHostBuilderExtensions.cs @@ -1,6 +1,4 @@ -using Avalonia.Platform; -using Avalonia; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; diff --git a/Toolkit.Foundation.Avalonia/Extensions/IServiceCollectionExtensions.cs b/Toolkit.Foundation.Avalonia/Extensions/IServiceCollectionExtensions.cs index 051f89d..9a0b0b9 100644 --- a/Toolkit.Foundation.Avalonia/Extensions/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation.Avalonia/Extensions/IServiceCollectionExtensions.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; +using Avalonia.Controls; +using FluentAvalonia.UI.Controls; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; namespace Toolkit.Foundation.Avalonia @@ -8,7 +10,10 @@ namespace Toolkit.Foundation.Avalonia public static IServiceCollection AddNavigation(this IServiceCollection serviceCollection) { serviceCollection.TryAddSingleton(); - serviceCollection.TryAddSingleton(); + + serviceCollection.TryAddTransient, FrameNavigation>(); + serviceCollection.TryAddTransient, ContentDialogNavigation>(); + serviceCollection.TryAddTransient, ContentControlNavigation>(); return serviceCollection; } diff --git a/Toolkit.Foundation.Avalonia/Markups/NavigateExtension.cs b/Toolkit.Foundation.Avalonia/Markups/NavigateExtension.cs index 6d2c29a..9eb9bf4 100644 --- a/Toolkit.Foundation.Avalonia/Markups/NavigateExtension.cs +++ b/Toolkit.Foundation.Avalonia/Markups/NavigateExtension.cs @@ -2,13 +2,14 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Markup.Xaml; +using Mediator; namespace Toolkit.Foundation.Avalonia { public class NavigateExtension : TriggerExtension { - private static readonly AttachedProperty NavigationRouterProperty = - AvaloniaProperty.RegisterAttached("NavigationRouter"); + private static readonly AttachedProperty MediatorProperty = + AvaloniaProperty.RegisterAttached("Mediator"); private static readonly AttachedProperty ParameterProperty = AvaloniaProperty.RegisterAttached("Parameter"); @@ -19,48 +20,48 @@ namespace Toolkit.Foundation.Avalonia private static readonly AvaloniaProperty ToProperty = AvaloniaProperty.RegisterAttached("To"); - private readonly Binding? navigationRouterBinding; + private readonly Binding? mediatorBinding; private readonly List parameters = new(); private readonly Binding? toBinding; private object? route; private Binding? routeBinding; - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, object args3) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -68,14 +69,14 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, object args3, object args4) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -84,7 +85,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -92,7 +93,7 @@ namespace Toolkit.Foundation.Avalonia object args4, object args5) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -102,7 +103,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -111,7 +112,7 @@ namespace Toolkit.Foundation.Avalonia object args5, object args6) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -122,7 +123,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -132,7 +133,7 @@ namespace Toolkit.Foundation.Avalonia object args6, object args7) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -144,7 +145,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -155,7 +156,7 @@ namespace Toolkit.Foundation.Avalonia object args7, object args8) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -168,7 +169,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -180,7 +181,7 @@ namespace Toolkit.Foundation.Avalonia object args8, object args9) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -194,7 +195,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -207,7 +208,7 @@ namespace Toolkit.Foundation.Avalonia object args9, object args10) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -222,7 +223,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -236,7 +237,7 @@ namespace Toolkit.Foundation.Avalonia object args10, object args11) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -252,7 +253,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -267,7 +268,7 @@ namespace Toolkit.Foundation.Avalonia object args11, object args12) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -284,7 +285,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -300,7 +301,7 @@ namespace Toolkit.Foundation.Avalonia object args12, object args13) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -318,7 +319,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -335,7 +336,7 @@ namespace Toolkit.Foundation.Avalonia object args13, object args14) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -354,7 +355,7 @@ namespace Toolkit.Foundation.Avalonia parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); } - public NavigateExtension(object navigationRouter, + public NavigateExtension(object mediator, object to, object args1, object args2, @@ -372,7 +373,7 @@ namespace Toolkit.Foundation.Avalonia object args14, object args15) { - navigationRouterBinding = navigationRouter.ToBinding(); + mediatorBinding = mediator.ToBinding(); this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); @@ -413,10 +414,10 @@ namespace Toolkit.Foundation.Avalonia { if (TargetObject is not null) { - if (navigationRouterBinding is not null) + if (mediatorBinding is not null) { - TargetObject.Bind(NavigationRouterProperty, navigationRouterBinding); - if (TargetObject.GetValue(NavigationRouterProperty) is INavigationRouter router) + TargetObject.Bind(MediatorProperty, mediatorBinding); + if (TargetObject.GetValue(MediatorProperty) is IMediator mediator) { if (toBinding is not null) { @@ -464,12 +465,12 @@ namespace Toolkit.Foundation.Avalonia name = string.Format(format, name); } - router.Navigate(new Navigate(name, parameters.ToArray()) { Route = route }); + mediator.Send(new Navigate(name, parameters.ToArray()) { Route = route }); } if (to is Type type) { - router.Navigate(new Navigate(type, parameters.ToArray()) { Route = route }); + mediator.Send(new Navigate(type, parameters.ToArray()) { Route = route }); } } } diff --git a/Toolkit.Foundation.Avalonia/Markups/NavigationRouteExtension.cs b/Toolkit.Foundation.Avalonia/Markups/NavigationRouteExtension.cs index aa8c02e..fb182b7 100644 --- a/Toolkit.Foundation.Avalonia/Markups/NavigationRouteExtension.cs +++ b/Toolkit.Foundation.Avalonia/Markups/NavigationRouteExtension.cs @@ -4,20 +4,21 @@ using Avalonia.Controls.Primitives; using Avalonia.Data; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; +using Mediator; namespace Toolkit.Foundation.Avalonia { public class NavigationRouteExtension : MarkupExtension { - private static readonly AttachedProperty RouteProperty = - AvaloniaProperty.RegisterAttached("Route"); + private static readonly AttachedProperty MediatorProperty = + AvaloniaProperty.RegisterAttached("Mediator"); private readonly string name; - private readonly Binding? routeBinding; + private readonly Binding? mediatorBinding; - public NavigationRouteExtension(object route, string name) + public NavigationRouteExtension(object mediator, string name) { - routeBinding = route is Binding toBinding ? toBinding : route.ToBinding(); + mediatorBinding = mediator is Binding toBinding ? toBinding : mediator.ToBinding(); this.name = name; } @@ -33,50 +34,55 @@ namespace Toolkit.Foundation.Avalonia { if (target.TargetObject is TemplatedControl control) { - if (routeBinding is not null) + if (!TryGetBinding(control, out object? binding)) { - if (!TryGetBinding(control, out object? binding)) + void HandleDataContextChanged(object? sender, EventArgs args) { - void HandleDataContextChanged(object? sender, EventArgs args) - { - if (TryGetBinding(control, out binding)) - { - control.Loaded -= HandleLoaded; - control.Bind(RouteProperty, routeBinding); - - if (control?.GetValue(RouteProperty) is INavigationRouter router) - { - router.Register(name, control); - control.ClearValue(RouteProperty); - } - } - } - - control.DataContextChanged += HandleDataContextChanged; - - void HandleLoaded(object? sender, RoutedEventArgs args) + if (TryGetBinding(control, out binding)) { control.Loaded -= HandleLoaded; - if (TryGetBinding(control, out binding)) + if (mediatorBinding is not null) { - control.Bind(RouteProperty, routeBinding); - if (control?.GetValue(RouteProperty) is INavigationRouter router) + control.Bind(MediatorProperty, mediatorBinding); + if (control.GetValue(MediatorProperty) is IMediator mediator) { - router.Register(name, control); - control.ClearValue(RouteProperty); + mediator.Send(new NavigationRoute(name, control)); + control.ClearValue(MediatorProperty); } } } - - control.Loaded += HandleLoaded; } - else + + control.DataContextChanged += HandleDataContextChanged; + + void HandleLoaded(object? sender, RoutedEventArgs args) { - control.Bind(RouteProperty, routeBinding); - if (control?.GetValue(RouteProperty) is INavigationRouter router) + control.Loaded -= HandleLoaded; + if (TryGetBinding(control, out binding)) { - router.Register(name, control); - control.ClearValue(RouteProperty); + if (mediatorBinding is not null) + { + control.Bind(MediatorProperty, mediatorBinding); + if (control.GetValue(MediatorProperty) is IMediator mediator) + { + mediator.Send(new NavigationRoute(name, control)); + control.ClearValue(MediatorProperty); + } + } + } + } + + control.Loaded += HandleLoaded; + } + else + { + if (mediatorBinding is not null) + { + control.Bind(MediatorProperty, mediatorBinding); + if (control.GetValue(MediatorProperty) is IMediator mediator) + { + mediator.Send(new NavigationRoute(name, control)); + control.ClearValue(MediatorProperty); } } } diff --git a/Toolkit.Foundation.Avalonia/Navigation/ContentControlHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/ContentControlHandler.cs deleted file mode 100644 index b908f62..0000000 --- a/Toolkit.Foundation.Avalonia/Navigation/ContentControlHandler.cs +++ /dev/null @@ -1,19 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Controls.Primitives; - -namespace Toolkit.Foundation.Avalonia -{ - //public class ContentControlHandler : NavigationRouteHandler - //{ - // public override void Receive(NavigationRouteRequest message) - // { - // if (message.Template is TemplatedControl control) - // { - // control.DataContext = message.Content; - // message.Target.Content = control; - // } - - // message.Reply(true); - // } - //} -} diff --git a/Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigation.cs b/Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigation.cs new file mode 100644 index 0000000..d5bee32 --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigation.cs @@ -0,0 +1,14 @@ +using Avalonia.Controls; + +namespace Toolkit.Foundation.Avalonia +{ + public record ContentControlNavigation : Navigation + { + public ContentControlNavigation(ContentControl route, + object? content, + object? template, + IDictionary? parameters) : base(route, content, template, parameters) + { + } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigationHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigationHandler.cs new file mode 100644 index 0000000..e2f3a1f --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/ContentControlNavigationHandler.cs @@ -0,0 +1,19 @@ +using Avalonia.Controls.Primitives; +using Mediator; + +namespace Toolkit.Foundation.Avalonia +{ + public class ContentControlNavigationHandler : IRequestHandler + { + public async ValueTask Handle(ContentControlNavigation request, CancellationToken cancellationToken) + { + if (request.Template is TemplatedControl control) + { + control.DataContext = request.Content; + request.Route.Content = control; + } + + return await Task.FromResult(true); + } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/ContentDialogHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/ContentDialogHandler.cs deleted file mode 100644 index 5f67780..0000000 --- a/Toolkit.Foundation.Avalonia/Navigation/ContentDialogHandler.cs +++ /dev/null @@ -1,52 +0,0 @@ -using FluentAvalonia.UI.Controls; - -namespace Toolkit.Foundation.Avalonia -{ - //public class ContentDialogHandler : NavigationRouteHandler - //{ - // public override async void Receive(NavigationRouteRequest message) - // { - // if (message.Template is ContentDialog contentDialog) - // { - // async void HandleButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) - // { - // ContentDialogButtonClickDeferral defferal = args.GetDeferral(); - - // if (sender.DataContext is INavigationConfirmationAsync confirmationAsync) - // { - // if (!await confirmationAsync.CanConfirmAsync()) - // { - // args.Cancel = true; - // } - // } - - // if (sender.DataContext is INavigationConfirmation confirmation) - // { - // if (!confirmation.CanConfirm()) - // { - // args.Cancel = true; - // } - // } - - // if (!args.Cancel) - // { - // contentDialog.SecondaryButtonClick -= HandleButtonClick; - // contentDialog.PrimaryButtonClick -= HandleButtonClick; - // contentDialog.CloseButtonClick -= HandleButtonClick; - // } - - // defferal.Complete(); - // } - - // contentDialog.SecondaryButtonClick += HandleButtonClick; - // contentDialog.PrimaryButtonClick += HandleButtonClick; - // contentDialog.CloseButtonClick += HandleButtonClick; - - // contentDialog.DataContext = message.Content; - // await contentDialog.ShowAsync(); - - // message.Reply(true); - // } - // } - //} -} diff --git a/Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigation.cs b/Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigation.cs new file mode 100644 index 0000000..44b424b --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigation.cs @@ -0,0 +1,15 @@ +using FluentAvalonia.UI.Controls; + +namespace Toolkit.Foundation.Avalonia +{ + public record ContentDialogNavigation : Navigation + { + public ContentDialogNavigation(ContentDialog route, + object? content, + object? template, + IDictionary? parameters) : base(route, content, template, parameters) + { + + } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigationHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigationHandler.cs new file mode 100644 index 0000000..edbacaf --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/ContentDialogNavigationHandler.cs @@ -0,0 +1,53 @@ +using FluentAvalonia.UI.Controls; +using Mediator; + +namespace Toolkit.Foundation.Avalonia +{ + public class ContentDialogNavigationHandler : IRequestHandler + { + public async ValueTask Handle(ContentDialogNavigation request, CancellationToken cancellationToken) + { + if (request.Template is ContentDialog contentDialog) + { + async void HandleButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) + { + ContentDialogButtonClickDeferral defferal = args.GetDeferral(); + + if (sender.DataContext is INavigationConfirmationAsync confirmationAsync) + { + if (!await confirmationAsync.CanConfirmAsync()) + { + args.Cancel = true; + } + } + + if (sender.DataContext is INavigationConfirmation confirmation) + { + if (!confirmation.CanConfirm()) + { + args.Cancel = true; + } + } + + if (!args.Cancel) + { + contentDialog.SecondaryButtonClick -= HandleButtonClick; + contentDialog.PrimaryButtonClick -= HandleButtonClick; + contentDialog.CloseButtonClick -= HandleButtonClick; + } + + defferal.Complete(); + } + + contentDialog.SecondaryButtonClick += HandleButtonClick; + contentDialog.PrimaryButtonClick += HandleButtonClick; + contentDialog.CloseButtonClick += HandleButtonClick; + + contentDialog.DataContext = request.Content; + await contentDialog.ShowAsync(); + } + + return await Task.FromResult(true); + } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/FrameHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/FrameHandler.cs deleted file mode 100644 index 3d80f40..0000000 --- a/Toolkit.Foundation.Avalonia/Navigation/FrameHandler.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Avalonia.Controls.Primitives; -using FluentAvalonia.UI.Controls; -using FluentAvalonia.UI.Navigation; - -namespace Toolkit.Foundation.Avalonia -{ - //public class FrameHandler : NavigationRouteHandler - //{ - // public override async void Receive(NavigationRouteRequest message) - // { - // message.Target.NavigationPageFactory = new NavigationPageFactory(); - - // TaskCompletionSource completionSource = new(); - // if (message.Template is TemplatedControl content) - // { - // void HandleNavigated(object sender, NavigationEventArgs args) - // { - // message.Target.Navigated -= HandleNavigated; - // if (message.Target.Content is TemplatedControl control) - // { - // control.DataContext = message.Content; - // completionSource.SetResult(true); - // } - // } - - // message.Target.Navigated += HandleNavigated; - // message.Target.NavigateFromObject(content); - // } - - // message.Reply(await completionSource.Task); - // } - //} -} diff --git a/Toolkit.Foundation.Avalonia/Navigation/FrameNavigation.cs b/Toolkit.Foundation.Avalonia/Navigation/FrameNavigation.cs new file mode 100644 index 0000000..b0358b0 --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/FrameNavigation.cs @@ -0,0 +1,15 @@ +using FluentAvalonia.UI.Controls; + +namespace Toolkit.Foundation.Avalonia +{ + public record FrameNavigation : Navigation + { + public FrameNavigation(Frame route, + object? content, + object? template, + IDictionary? + parameters) : base(route, content, template, parameters) + { + } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/FrameNavigationHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/FrameNavigationHandler.cs new file mode 100644 index 0000000..4a4fd7f --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/FrameNavigationHandler.cs @@ -0,0 +1,33 @@ +using Avalonia.Controls.Primitives; +using FluentAvalonia.UI.Navigation; +using Mediator; + +namespace Toolkit.Foundation.Avalonia +{ + public class FrameNavigationHandler : IRequestHandler + { + public async ValueTask Handle(FrameNavigation request, CancellationToken cancellationToken) + { + request.Route.NavigationPageFactory = new NavigationPageFactory(); + + TaskCompletionSource completionSource = new(); + if (request.Template is TemplatedControl content) + { + void HandleNavigated(object sender, NavigationEventArgs args) + { + request.Route.Navigated -= HandleNavigated; + if (request.Route.Content is TemplatedControl control) + { + control.DataContext = request.Content; + completionSource.SetResult(true); + } + } + + request.Route.Navigated += HandleNavigated; + request.Route.NavigateFromObject(content); + } + + return await completionSource.Task; + } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/INavigationRouteHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/INavigationRouteHandler.cs deleted file mode 100644 index 72c3326..0000000 --- a/Toolkit.Foundation.Avalonia/Navigation/INavigationRouteHandler.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Avalonia.Controls.Primitives; - -namespace Toolkit.Foundation.Avalonia -{ - //public interface INavigationRouteHandler where TTarget : TemplatedControl - //{ - // void Handle(NavigationRouteRequest message); - //} -} diff --git a/Toolkit.Foundation.Avalonia/Navigation/NavigateBackHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/NavigateBackHandler.cs new file mode 100644 index 0000000..45837e6 --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/NavigateBackHandler.cs @@ -0,0 +1,38 @@ +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using FluentAvalonia.UI.Controls; +using Mediator; + +namespace Toolkit.Foundation.Avalonia +{ + public class NavigateBackHandler : IRequestHandler + { + private readonly INavigationRouteDescriptorCollection descriptors; + + public NavigateBackHandler(INavigationRouteDescriptorCollection descriptors) + { + this.descriptors = descriptors; + } + + public ValueTask Handle(NavigateBack request, CancellationToken cancellationToken) + { + if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) + { + if (descriptor.Route is ContentControl { Content: TemplatedControl content }) + { + if (content.DataContext is IDisposable disposable) + { + disposable.Dispose(); + } + } + + if (descriptor.Route is Frame frame) + { + frame.GoBack(); + } + } + + return default; + } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/NavigationRouter.cs b/Toolkit.Foundation.Avalonia/Navigation/NavigateHandler.cs similarity index 51% rename from Toolkit.Foundation.Avalonia/Navigation/NavigationRouter.cs rename to Toolkit.Foundation.Avalonia/Navigation/NavigateHandler.cs index 35f3101..8fb5960 100644 --- a/Toolkit.Foundation.Avalonia/Navigation/NavigationRouter.cs +++ b/Toolkit.Foundation.Avalonia/Navigation/NavigateHandler.cs @@ -1,12 +1,10 @@ using Avalonia.Controls; -using Avalonia.Controls.Primitives; -using Avalonia.Interactivity; using FluentAvalonia.UI.Controls; using Mediator; namespace Toolkit.Foundation.Avalonia { - public class NavigationRouter : INavigationRouter + public class NavigateHandler : IRequestHandler { private readonly INavigationRouteDescriptorCollection descriptors; private readonly IMediator mediator; @@ -15,7 +13,7 @@ namespace Toolkit.Foundation.Avalonia private readonly ITemplateFactory templateFactory; private readonly ITypedDataTemplateFactory typedDataTemplateFactory; - public NavigationRouter(IMediator mediator, + public NavigateHandler(IMediator mediator, ITemplateFactory templateFactory, INamedTemplateFactory namedTemplateFactory, INamedDataTemplateFactory namedDataTemplateFactory, @@ -30,31 +28,7 @@ namespace Toolkit.Foundation.Avalonia this.descriptors = descriptors; } - public void GoBack(NavigateBack args) - { - if (descriptors.FirstOrDefault(x => args.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) - { - if (descriptor.Route is ContentControl { Content: TemplatedControl content }) - { - if (content.DataContext is IDisposable disposable) - { - disposable.Dispose(); - } - } - - if (descriptor.Route is Frame frame) - { - frame.GoBack(); - } - } - } - - public Task InitializeAsync() - { - return Task.CompletedTask; - } - - public async void Navigate(Navigate args) + public async ValueTask Handle(Navigate request, CancellationToken cancellationToken) { object? content = null; object? template = null; @@ -62,7 +36,7 @@ namespace Toolkit.Foundation.Avalonia Dictionary keyedParameters = new(); List parameters = new(); - foreach (object? parameter in args.Parameters) + foreach (object? parameter in request.Parameters) { if (parameter is not null) { @@ -77,13 +51,13 @@ namespace Toolkit.Foundation.Avalonia } } - if (args.Name is { Length: > 0 } name) + if (request.Name is { Length: > 0 } name) { content = namedDataTemplateFactory.Create(name, parameters.ToArray()); template = namedTemplateFactory.Create(name); } - if (args.Type is Type type) + if (request.Type is Type type) { content = typedDataTemplateFactory.Create(type, parameters.ToArray()); template = templateFactory.Create(content); @@ -91,27 +65,34 @@ namespace Toolkit.Foundation.Avalonia if (template is not null) { - object? target = null; - if (descriptors.FirstOrDefault(x => args.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) + object? route = null; + if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) { - target = descriptor.Route; + route = descriptor.Route; } else { - target = template; + route = template; } - if (target is TemplatedControl control) + if (route is Frame frame) { - //if (await messenger.Send(NavigationRouteRequest.Create(control, content, template, keyedParameters))) - //{ - // messenger.Send(Navigated.Create(template, content, keyedParameters)); - //} + await mediator.Send(new FrameNavigation(frame, content, template, keyedParameters)); + } + + if (route is ContentDialog dialog) + { + await mediator.Send(new ContentDialogNavigation(dialog, content, template, keyedParameters)); + } + + if (route is ContentControl contentControl) + { + await mediator.Send(new ContentControlNavigation(contentControl, content, template, keyedParameters)); } } else { - if (descriptors.FirstOrDefault(x => args.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) + if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) { if (descriptor.Route is ContentControl contentControl) { @@ -119,29 +100,8 @@ namespace Toolkit.Foundation.Avalonia } } } - } - public void Register(string name, object route) - { - if (route is TemplatedControl control) - { - void HandleUnloaded(object? sender, RoutedEventArgs args) - { - if (descriptors.FirstOrDefault(x => x.Route == sender) is INavigationRouteDescriptor descriptor) - { - descriptors.Remove(descriptor); - } - } - - control.Unloaded += HandleUnloaded; - } - - if (descriptors.FirstOrDefault(x => x.Name == name) is INavigationRouteDescriptor descriptor) - { - descriptors.Remove(descriptor); - } - - descriptors.Add(new NavigationRouteDescriptor(name, route)); + return default; } } } diff --git a/Toolkit.Foundation.Avalonia/Navigation/Navigation.cs b/Toolkit.Foundation.Avalonia/Navigation/Navigation.cs new file mode 100644 index 0000000..593e372 --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Navigation/Navigation.cs @@ -0,0 +1,27 @@ +using Avalonia.Controls.Primitives; +using Mediator; + +namespace Toolkit.Foundation.Avalonia +{ + public record Navigation : IRequest where TRoute : TemplatedControl + { + public TRoute Route { get; } + + public Navigation(TRoute route, + object? content, + object? template, + IDictionary? parameters) + { + Route = route; + Content = content; + Template = template; + Parameters = parameters; + } + + public object? Content { get; } + + public object? Template { get; } + + public IDictionary? Parameters { get; } + } +} diff --git a/Toolkit.Foundation.Avalonia/Navigation/NavigationRouteHandler.cs b/Toolkit.Foundation.Avalonia/Navigation/NavigationRouteHandler.cs index 9d2136e..3b190e8 100644 --- a/Toolkit.Foundation.Avalonia/Navigation/NavigationRouteHandler.cs +++ b/Toolkit.Foundation.Avalonia/Navigation/NavigationRouteHandler.cs @@ -1,9 +1,39 @@ using Avalonia.Controls.Primitives; +using Avalonia.Interactivity; +using Mediator; namespace Toolkit.Foundation.Avalonia { - //public abstract class NavigationRouteHandler : IRecipient> where TTarget : TemplatedControl - //{ - // public abstract void Receive(NavigationRouteRequest message); - //} + public class NavigationRouteHandler : IRequestHandler + { + private readonly INavigationRouteDescriptorCollection descriptors; + + public NavigationRouteHandler(INavigationRouteDescriptorCollection descriptors) + { + this.descriptors = descriptors; + } + + public ValueTask Handle(NavigationRoute request, CancellationToken cancellationToken) + { + if (request.Route is TemplatedControl control) + { + void HandleUnloaded(object? sender, RoutedEventArgs args) + { + if (descriptors.FirstOrDefault(x => x.Route == sender) is INavigationRouteDescriptor descriptor) + { + descriptors.Remove(descriptor); + } + } + control.Unloaded += HandleUnloaded; + } + + if (descriptors.FirstOrDefault(x => x.Name == request.Name) is INavigationRouteDescriptor descriptor) + { + descriptors.Remove(descriptor); + } + + descriptors.Add(new NavigationRouteDescriptor(request.Name, request.Route)); + return default; + } + } } diff --git a/Toolkit.Foundation.Avalonia/Navigation/NavigationRouteRequest.cs b/Toolkit.Foundation.Avalonia/Navigation/NavigationRouteRequest.cs deleted file mode 100644 index 84a2d14..0000000 --- a/Toolkit.Foundation.Avalonia/Navigation/NavigationRouteRequest.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Avalonia.Controls.Primitives; - -namespace Toolkit.Foundation.Avalonia -{ - //public class NavigationRouteRequest : AsyncRequestMessage where TTarget : TemplatedControl - //{ - // public NavigationRouteRequest(TTarget target, object? content, object? template, IDictionary? parameters = null) - // { - // Target = target; - // Content = content; - // Template = template; - // Parameters = parameters; - // } - - // public TTarget Target { get; } - - // public object? Content { get; } - - // public object? Template { get; } - - // public IDictionary? Parameters { get; } - //} - - //public class NavigationRouteRequest - //{ - // public static NavigationRouteRequest Create(TTarget target, object? content, object? template, IDictionary? parameters = null) where TTarget : TemplatedControl - // { - // return new NavigationRouteRequest(target, content, template, parameters); - // } - //} -} diff --git a/Toolkit.Foundation.Avalonia/Properties/Assembly.cs b/Toolkit.Foundation.Avalonia/Properties/Assembly.cs new file mode 100644 index 0000000..b8cb131 --- /dev/null +++ b/Toolkit.Foundation.Avalonia/Properties/Assembly.cs @@ -0,0 +1,3 @@ +using Avalonia.Metadata; + +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Toolkit.Foundation.Avalonia")] \ No newline at end of file diff --git a/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs b/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs index 2b8a27c..9b717e4 100644 --- a/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/Extensions/IServiceCollectionExtensions.cs @@ -1,9 +1,17 @@ -using Microsoft.Extensions.DependencyInjection; +using Mediator; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; namespace Toolkit.Foundation { public static class IServiceCollectionExtensions { + public static IServiceCollection AddHandler(this IServiceCollection serviceCollection) + { + serviceCollection.TryAdd(new ServiceDescriptor(typeof(TRequestHandler), typeof(TRequestHandler), ServiceLifetime.Transient)); + return serviceCollection; + } + public static IServiceCollection AddFoundation(this IServiceCollection serviceCollection) { serviceCollection.AddSingleton(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!))); diff --git a/Toolkit.Foundation/Extensions/IServiceFactoryExtensions.cs b/Toolkit.Foundation/Extensions/IServiceFactoryExtensions.cs index ba6fa57..ddb0538 100644 --- a/Toolkit.Foundation/Extensions/IServiceFactoryExtensions.cs +++ b/Toolkit.Foundation/Extensions/IServiceFactoryExtensions.cs @@ -2,12 +2,7 @@ { public static class IServiceFactoryExtensions { - public static T? Get(this IServiceFactory serviceFactory) - { - return serviceFactory.Get(typeof(T)); - } - - public static T Create(this IServiceFactory serviceFactory, params object?[] parameters) + public static T? Create(this IServiceFactory serviceFactory, params object?[] parameters) { return serviceFactory.Create(typeof(T), parameters); } diff --git a/Toolkit.Foundation/Navigation/INavigationRouter.cs b/Toolkit.Foundation/Navigation/INavigationRouter.cs deleted file mode 100644 index 6d16547..0000000 --- a/Toolkit.Foundation/Navigation/INavigationRouter.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Toolkit.Foundation -{ - public interface INavigationRouter : IInitializer - { - void Navigate(Navigate args); - - void Register(string name, object route); - } -} \ No newline at end of file diff --git a/Toolkit.Foundation/Navigation/Navigate.cs b/Toolkit.Foundation/Navigation/Navigate.cs index c36006c..1d6fe06 100644 --- a/Toolkit.Foundation/Navigation/Navigate.cs +++ b/Toolkit.Foundation/Navigation/Navigate.cs @@ -1,6 +1,8 @@ -namespace Toolkit.Foundation +using Mediator; + +namespace Toolkit.Foundation { - public record Navigate + public record Navigate : IRequest { public Navigate(string name, params object?[] parameters) { diff --git a/Toolkit.Foundation/Navigation/NavigateBack.cs b/Toolkit.Foundation/Navigation/NavigateBack.cs index dfb3ec6..f2d2efe 100644 --- a/Toolkit.Foundation/Navigation/NavigateBack.cs +++ b/Toolkit.Foundation/Navigation/NavigateBack.cs @@ -1,4 +1,7 @@ -namespace Toolkit.Foundation +using Mediator; + +namespace Toolkit.Foundation { - public record NavigateBack(object Route); + public record NavigateBack(object Route) : IRequest; + } \ No newline at end of file diff --git a/Toolkit.Foundation/Navigation/NavigateHandler.cs b/Toolkit.Foundation/Navigation/NavigateHandler.cs deleted file mode 100644 index 6417263..0000000 --- a/Toolkit.Foundation/Navigation/NavigateHandler.cs +++ /dev/null @@ -1,18 +0,0 @@ - -namespace Toolkit.Foundation -{ - //public class NavigateHandler : IRecipient - //{ - // private readonly IMessenger messenger; - - // public NavigateHandler(IMessenger messenger) - // { - // this.messenger = messenger; - // } - - // public void Receive(Navigate request) - // { - // messenger.Send(request); - // } - //} -} \ No newline at end of file diff --git a/Toolkit.Foundation/Navigation/NavigationRoute.cs b/Toolkit.Foundation/Navigation/NavigationRoute.cs new file mode 100644 index 0000000..755940b --- /dev/null +++ b/Toolkit.Foundation/Navigation/NavigationRoute.cs @@ -0,0 +1,6 @@ +using Mediator; + +namespace Toolkit.Foundation +{ + public record NavigationRoute(string Name, object Route) : IRequest; +} \ No newline at end of file diff --git a/Toolkit.Foundation/Services/IServiceFactory.cs b/Toolkit.Foundation/Services/IServiceFactory.cs index 81b833c..131c7d7 100644 --- a/Toolkit.Foundation/Services/IServiceFactory.cs +++ b/Toolkit.Foundation/Services/IServiceFactory.cs @@ -2,8 +2,8 @@ { public interface IServiceFactory { - T? Get(Type type); + object? Create(Type type, params object?[] parameters); - T Create(Type type, params object?[] parameters); + T? Create(Type type, params object?[] parameters); } } diff --git a/Toolkit.Foundation/Services/ServiceCreator.cs b/Toolkit.Foundation/Services/ServiceCreator.cs index 74446ba..1546f1a 100644 --- a/Toolkit.Foundation/Services/ServiceCreator.cs +++ b/Toolkit.Foundation/Services/ServiceCreator.cs @@ -1,6 +1,6 @@ namespace Toolkit.Foundation { - public class ServiceCreator : IServiceCreator + public class ServiceCreator : IServiceCreator { public virtual object Create(Func creator, params object[] parameters) { diff --git a/Toolkit.Foundation/Services/ServiceFactory.cs b/Toolkit.Foundation/Services/ServiceFactory.cs index 5325191..523cd95 100644 --- a/Toolkit.Foundation/Services/ServiceFactory.cs +++ b/Toolkit.Foundation/Services/ServiceFactory.cs @@ -11,13 +11,13 @@ this.creator = creator; } - public T? Get(Type type) + public object? Create(Type type, params object?[] parameters) { - T? value = (T?)factory(type); - return value; + dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type)); + return lookup is not null ? lookup.Create(creator, parameters) : creator(type, parameters); } - public T Create(Type type, params object?[] parameters) + public T? Create(Type type, params object?[] parameters) { dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type)); return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters); diff --git a/Toolkit.Foundation/Templates/NamedDataTemplateFactory.cs b/Toolkit.Foundation/Templates/NamedDataTemplateFactory.cs index b993b40..448c17a 100644 --- a/Toolkit.Foundation/Templates/NamedDataTemplateFactory.cs +++ b/Toolkit.Foundation/Templates/NamedDataTemplateFactory.cs @@ -23,7 +23,7 @@ if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor) { - data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.DataType, parameters) : serviceFactory.Get(descriptor.DataType); + data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.DataType, parameters) : serviceFactory.Create(descriptor.DataType); if (data is ICache cache) { this.cache[name] = cache; diff --git a/Toolkit.Foundation/Templates/NamedTemplateFactory.cs b/Toolkit.Foundation/Templates/NamedTemplateFactory.cs index 570f838..39f5c10 100644 --- a/Toolkit.Foundation/Templates/NamedTemplateFactory.cs +++ b/Toolkit.Foundation/Templates/NamedTemplateFactory.cs @@ -23,7 +23,7 @@ if (provider.Get(name) is ITemplateDescriptor descriptor) { - view = serviceFactory.Get(descriptor.TemplateType); + view = serviceFactory.Create(descriptor.TemplateType); if (view is ICache cache) { this.cache[name] = cache; diff --git a/Toolkit.Foundation/Templates/TemplateFactory.cs b/Toolkit.Foundation/Templates/TemplateFactory.cs index b7f1dfb..8c44252 100644 --- a/Toolkit.Foundation/Templates/TemplateFactory.cs +++ b/Toolkit.Foundation/Templates/TemplateFactory.cs @@ -30,7 +30,7 @@ namespace Toolkit.Foundation if (provider.Get(data.GetType()) is ITemplateDescriptor descriptor) { - template = serviceFactory.Get(descriptor.TemplateType); + template = serviceFactory.Create(descriptor.TemplateType); if (template is ICache cache) { this.cache[data] = cache; diff --git a/Toolkit.Foundation/Templates/TypedDataTemplateFactory.cs b/Toolkit.Foundation/Templates/TypedDataTemplateFactory.cs index d4e13f7..6b8bf2b 100644 --- a/Toolkit.Foundation/Templates/TypedDataTemplateFactory.cs +++ b/Toolkit.Foundation/Templates/TypedDataTemplateFactory.cs @@ -23,7 +23,7 @@ if (descriptors.FirstOrDefault(x => x.DataType == type) is ITemplateDescriptor descriptor) { - data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.DataType, parameters) : serviceFactory.Get(descriptor.DataType); + data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.DataType, parameters) : serviceFactory.Create(descriptor.DataType); if (data is ICache cache) { this.cache[type] = cache;