From 0da4a37173cc827679213f371d2a6aac3f2aaa7a Mon Sep 17 00:00:00 2001 From: Daniel Clark Date: Sat, 10 Dec 2022 16:11:07 +0000 Subject: [PATCH] code sweep --- Avalonia/NavigationView/NavigationView.cs | 2 +- Avalonia/Properties/Assembly.cs | 2 +- Framework/Avalonia/Avalonia.csproj | 36 +- .../Extensions/EventArgsExtensions.cs | 2 +- .../Extensions/IHostBuilderExtensions.cs | 6 +- .../IServiceCollectionExtensions.cs | 1 + .../Avalonia/Extensions/MarkupExtensions.cs | 2 +- .../Extensions/PropertyPathHelper..cs | 2 +- .../Avalonia/Markups/CompositeExtension.cs | 621 ++++++------ .../Markups/EventParameterExtension.cs | 94 +- Framework/Avalonia/Markups/InvokeExtension.cs | 779 ++++++++------- .../Avalonia/Markups/NavigateExtension.cs | 892 +++++++++--------- .../Markups/NavigationRouteExtension.cs | 120 +-- .../Markups/ParameterBindingExtension.cs | 72 +- .../Avalonia/Markups/TriggerCollection.cs | 13 +- .../Avalonia/Markups/TriggerExtension.cs | 100 +- .../Navigation/ContentControlNavigation.cs | 17 +- .../ContentControlNavigationHandler.cs | 25 +- .../Navigation/ContentDialogNavigation.cs | 20 +- .../ContentDialogNavigationHandler.cs | 53 +- .../Avalonia/Navigation/FrameNavigation.cs | 19 +- .../Navigation/FrameNavigationHandler.cs | 37 +- .../Navigation/NavigateBackHandler.cs | 44 +- .../Avalonia/Navigation/NavigateHandler.cs | 184 ++-- Framework/Avalonia/Navigation/Navigation.cs | 41 +- .../Navigation/NavigationPageFactory.cs | 23 +- .../Navigation/NavigationRouteHandler.cs | 48 +- .../Avalonia/Templates/TemplateSelector.cs | 7 +- .../Configurations/ConfigurationChanged.cs | 4 +- .../ConfigurationInitializer.cs | 4 +- .../Configurations/ConfigurationWriter.cs | 2 +- .../Configurations/IConfigurationWriter.cs | 4 +- .../IWritableConfigurationProvider.cs | 4 +- .../IWritableJsonConfigurationBuilder.cs | 4 +- .../IWritableJsonConfigurationDescriptor.cs | 4 +- .../WritableJsonConfigurationBuilder.cs | 7 +- .../WritableJsonConfigurationDescriptor.cs | 4 +- .../WritableJsonConfigurationExtensions.cs | 4 +- .../WritableJsonConfigurationFile.cs | 4 +- .../WritableJsonConfigurationProvider.cs | 5 +- .../WritableJsonConfigurationSource.cs | 8 +- Framework/Foundation/Configurations/Write.cs | 4 +- .../Foundation/Configurations/WriteHandler.cs | 4 +- .../Extensions/IHostBuilderExtensions.cs | 4 +- .../IServiceCollectionExtensions.cs | 5 +- .../Extensions/IServiceFactoryExtensions.cs | 4 +- Framework/Foundation/Lifecycles/AppService.cs | 4 +- Framework/Foundation/Lifecycles/ICache.cs | 5 +- .../Foundation/Lifecycles/IInitializable.cs | 4 +- .../Foundation/Lifecycles/IInitialization.cs | 4 +- .../Foundation/Lifecycles/Initialization.cs | 4 +- Framework/Foundation/Lifecycles/Initialize.cs | 4 +- .../Lifecycles/InitializeHandler.cs | 4 +- .../Foundation/Lifecycles/Initialized.cs | 4 +- .../Foundation/Navigation/IEventParameter.cs | 10 +- .../Navigation/INavigationConfirmation.cs | 20 +- .../Navigation/INavigationRouteDescriptor.cs | 13 +- .../INavigationRouteDescriptorCollection.cs | 7 +- Framework/Foundation/Navigation/IParameter.cs | 13 +- Framework/Foundation/Navigation/Navigate.cs | 45 +- .../Foundation/Navigation/NavigateBack.cs | 6 +- .../Foundation/Navigation/NavigationRoute.cs | 7 +- .../Navigation/NavigationRouteDescriptor.cs | 21 +- .../NavigationRouteDescriptorCollection.cs | 9 +- .../Foundation/Services/IServiceCreator.cs | 11 +- .../Foundation/Services/IServiceFactory.cs | 15 +- .../Foundation/Services/ServiceCreator.cs | 13 +- .../Foundation/Services/ServiceFactory.cs | 45 +- .../Services/ServiceFactoryDescriptor.cs | 39 +- .../Templates/INamedDataTemplateFactory.cs | 11 +- .../Templates/INamedTemplateFactory.cs | 11 +- .../Foundation/Templates/ITemplateBuilder.cs | 15 +- .../Templates/ITemplateDescriptor.cs | 17 +- .../Templates/ITemplateDescriptorProvider.cs | 16 +- .../Foundation/Templates/ITemplateFactory.cs | 11 +- .../Foundation/Templates/ITemplateSelector.cs | 9 +- .../Templates/ITypedDataTemplateFactory.cs | 11 +- .../Templates/NamedDataTemplateFactory.cs | 57 +- .../Templates/NamedTemplateFactory.cs | 67 +- .../Foundation/Templates/TemplateBuilder.cs | 35 +- .../Templates/TemplateDescriptor.cs | 41 +- .../Templates/TemplateDescriptorProvider.cs | 77 +- .../Foundation/Templates/TemplateFactory.cs | 61 +- .../Templates/TypedDataTemplateFactory.cs | 57 +- 84 files changed, 2040 insertions(+), 2104 deletions(-) diff --git a/Avalonia/NavigationView/NavigationView.cs b/Avalonia/NavigationView/NavigationView.cs index 45ef5ed..ac0ef05 100644 --- a/Avalonia/NavigationView/NavigationView.cs +++ b/Avalonia/NavigationView/NavigationView.cs @@ -5,4 +5,4 @@ namespace Toolkit.Controls.Avalonia; public class NavigationView : FluentAvalonia.UI.Controls.NavigationView, IStyleable { Type IStyleable.StyleKey => typeof(FluentAvalonia.UI.Controls.NavigationView); -} +} \ No newline at end of file diff --git a/Avalonia/Properties/Assembly.cs b/Avalonia/Properties/Assembly.cs index 728e2ac..cb305e9 100644 --- a/Avalonia/Properties/Assembly.cs +++ b/Avalonia/Properties/Assembly.cs @@ -1,3 +1,3 @@ using Avalonia.Metadata; -[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Toolkit.Controls.Avalonia")] +[assembly: XmlnsDefinition("https://github.com/avaloniaui", "Toolkit.Controls.Avalonia")] \ No newline at end of file diff --git a/Framework/Avalonia/Avalonia.csproj b/Framework/Avalonia/Avalonia.csproj index a2edd3d..b097d4d 100644 --- a/Framework/Avalonia/Avalonia.csproj +++ b/Framework/Avalonia/Avalonia.csproj @@ -1,21 +1,17 @@  - - - net7.0 - enable - enable - Toolkit.Foundation.Avalonia - Toolkit.Foundation.Avalonia - - - - - - - - - - - - - + + net7.0 + enable + enable + Toolkit.Foundation.Avalonia + Toolkit.Foundation.Avalonia + + + + + + + + + + \ No newline at end of file diff --git a/Framework/Avalonia/Extensions/EventArgsExtensions.cs b/Framework/Avalonia/Extensions/EventArgsExtensions.cs index 33807bf..9e80244 100644 --- a/Framework/Avalonia/Extensions/EventArgsExtensions.cs +++ b/Framework/Avalonia/Extensions/EventArgsExtensions.cs @@ -21,4 +21,4 @@ namespace Toolkit.Foundation.Avalonia return value; } } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs b/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs index 71b2199..d747174 100644 --- a/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs +++ b/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs @@ -1,7 +1,7 @@ -using Mediator; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Hosting; +using Toolkit.Framework.Foundation; namespace Toolkit.Foundation.Avalonia { @@ -32,4 +32,4 @@ namespace Toolkit.Foundation.Avalonia return hostBuilder; } } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Extensions/IServiceCollectionExtensions.cs b/Framework/Avalonia/Extensions/IServiceCollectionExtensions.cs index 9a0b0b9..6be1022 100644 --- a/Framework/Avalonia/Extensions/IServiceCollectionExtensions.cs +++ b/Framework/Avalonia/Extensions/IServiceCollectionExtensions.cs @@ -2,6 +2,7 @@ using FluentAvalonia.UI.Controls; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; +using Toolkit.Framework.Foundation; namespace Toolkit.Foundation.Avalonia { diff --git a/Framework/Avalonia/Extensions/MarkupExtensions.cs b/Framework/Avalonia/Extensions/MarkupExtensions.cs index 1ae3dc7..a2085fa 100644 --- a/Framework/Avalonia/Extensions/MarkupExtensions.cs +++ b/Framework/Avalonia/Extensions/MarkupExtensions.cs @@ -14,4 +14,4 @@ namespace Toolkit.Foundation.Avalonia return new Binding { Mode = BindingMode.OneWay, Source = value }; } } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Extensions/PropertyPathHelper..cs b/Framework/Avalonia/Extensions/PropertyPathHelper..cs index c127a92..b25e696 100644 --- a/Framework/Avalonia/Extensions/PropertyPathHelper..cs +++ b/Framework/Avalonia/Extensions/PropertyPathHelper..cs @@ -25,4 +25,4 @@ namespace Toolkit.Foundation.Avalonia AvaloniaProperty.Register("Value"); } } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Markups/CompositeExtension.cs b/Framework/Avalonia/Markups/CompositeExtension.cs index f051363..cca6f53 100644 --- a/Framework/Avalonia/Markups/CompositeExtension.cs +++ b/Framework/Avalonia/Markups/CompositeExtension.cs @@ -1,321 +1,320 @@ using Avalonia.Markup.Xaml; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class CompositeExtension : TriggerExtension { - public class CompositeExtension : TriggerExtension + [ConstructorArgument(nameof(Triggers))] + public TriggerCollection Triggers { get; } = new TriggerCollection(); + + public CompositeExtension(object args0) { - [ConstructorArgument(nameof(Triggers))] - public TriggerCollection Triggers { get; } = new TriggerCollection(); + Triggers.Add(args0); + } - public CompositeExtension(object args0) + public CompositeExtension(object args0, + object args1) + { + Triggers.Add(args0); + Triggers.Add(args1); + } + + public CompositeExtension(object args0, + object args1, + object args2) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + Triggers.Add(args9); + } + + public CompositeExtension(object args0, object args1, object args2, object args3, object args4, + object args5, object args6, object args7, object args8, object args9, object args10) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + Triggers.Add(args9); + Triggers.Add(args10); + } + + public CompositeExtension(object args0, object args1, object args2, object args3, object args4, + object args5, object args6, object args7, object args8, object args9, object args10, object args11) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + Triggers.Add(args9); + Triggers.Add(args10); + Triggers.Add(args11); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + Triggers.Add(args9); + Triggers.Add(args10); + Triggers.Add(args11); + Triggers.Add(args12); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + Triggers.Add(args9); + Triggers.Add(args10); + Triggers.Add(args11); + Triggers.Add(args12); + Triggers.Add(args13); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13, + object args14) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + Triggers.Add(args9); + Triggers.Add(args10); + Triggers.Add(args11); + Triggers.Add(args12); + Triggers.Add(args13); + Triggers.Add(args14); + } + + public CompositeExtension(object args0, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13, + object args14, + object args15) + { + Triggers.Add(args0); + Triggers.Add(args1); + Triggers.Add(args2); + Triggers.Add(args3); + Triggers.Add(args4); + Triggers.Add(args5); + Triggers.Add(args6); + Triggers.Add(args7); + Triggers.Add(args8); + Triggers.Add(args9); + Triggers.Add(args10); + Triggers.Add(args11); + Triggers.Add(args12); + Triggers.Add(args13); + Triggers.Add(args14); + Triggers.Add(args15); + } + + protected override void OnInvoked(object sender, EventArgs args) + { + foreach (Delegate? trigger in Triggers) { - Triggers.Add(args0); + trigger.Method.Invoke(trigger.Target, new object[] { sender, args }); } - public CompositeExtension(object args0, - object args1) - { - Triggers.Add(args0); - Triggers.Add(args1); - } - - public CompositeExtension(object args0, - object args1, - object args2) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - Triggers.Add(args9); - } - - public CompositeExtension(object args0, object args1, object args2, object args3, object args4, - object args5, object args6, object args7, object args8, object args9, object args10) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - Triggers.Add(args9); - Triggers.Add(args10); - } - - public CompositeExtension(object args0, object args1, object args2, object args3, object args4, - object args5, object args6, object args7, object args8, object args9, object args10, object args11) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - Triggers.Add(args9); - Triggers.Add(args10); - Triggers.Add(args11); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - Triggers.Add(args9); - Triggers.Add(args10); - Triggers.Add(args11); - Triggers.Add(args12); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - Triggers.Add(args9); - Triggers.Add(args10); - Triggers.Add(args11); - Triggers.Add(args12); - Triggers.Add(args13); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13, - object args14) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - Triggers.Add(args9); - Triggers.Add(args10); - Triggers.Add(args11); - Triggers.Add(args12); - Triggers.Add(args13); - Triggers.Add(args14); - } - - public CompositeExtension(object args0, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13, - object args14, - object args15) - { - Triggers.Add(args0); - Triggers.Add(args1); - Triggers.Add(args2); - Triggers.Add(args3); - Triggers.Add(args4); - Triggers.Add(args5); - Triggers.Add(args6); - Triggers.Add(args7); - Triggers.Add(args8); - Triggers.Add(args9); - Triggers.Add(args10); - Triggers.Add(args11); - Triggers.Add(args12); - Triggers.Add(args13); - Triggers.Add(args14); - Triggers.Add(args15); - } - - protected override void OnInvoked(object sender, EventArgs args) - { - foreach (Delegate? trigger in Triggers) - { - trigger.Method.Invoke(trigger.Target, new object[] { sender, args }); - } - - base.OnInvoked(sender, args); - } + base.OnInvoked(sender, args); } } \ No newline at end of file diff --git a/Framework/Avalonia/Markups/EventParameterExtension.cs b/Framework/Avalonia/Markups/EventParameterExtension.cs index 09fb0c5..af60f38 100644 --- a/Framework/Avalonia/Markups/EventParameterExtension.cs +++ b/Framework/Avalonia/Markups/EventParameterExtension.cs @@ -1,65 +1,63 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class EventParameterExtension : MarkupExtension, IEventParameter { - public class EventParameterExtension : MarkupExtension, IEventParameter + private readonly IValueConverter? converter; + + private readonly object? converterParameter; + + private readonly string? key; + private readonly string? path; + + public EventParameterExtension() { - private readonly IValueConverter? converter; + } - private readonly object? converterParameter; + public EventParameterExtension(string key, string path) + { + this.key = key; + this.path = path; + } - private readonly string? key; - private readonly string? path; + public EventParameterExtension(string path) + { + this.path = path; + } - public EventParameterExtension() + public EventParameterExtension(IValueConverter? converter = null, object? converterParameter = null) + { + this.converter = converter; + this.converterParameter = converterParameter; + } + + public List GetValues(EventArgs args) + { + List? parameters = new(); + + dynamic? arguments = args.GetEventArguments(path, converter, converterParameter); + if (arguments is not null) { - - } - - public EventParameterExtension(string key, string path) - { - this.key = key; - this.path = path; - } - - public EventParameterExtension(string path) - { - this.path = path; - } - - public EventParameterExtension(IValueConverter? converter = null, object? converterParameter = null) - { - this.converter = converter; - this.converterParameter = converterParameter; - } - - public List GetValues(EventArgs args) - { - List? parameters = new(); - - dynamic? arguments = args.GetEventArguments(path, converter, converterParameter); - if (arguments is not null) + if (arguments is ICollection collection) { - if (arguments is ICollection collection) + foreach (object? argument in collection) { - foreach (object? argument in collection) - { - parameters.Add(key is not null ? new KeyValuePair(key, (dynamic)argument) : argument); - } - } - else - { - parameters.Add(key is not null ? new KeyValuePair(key, arguments) : arguments); + parameters.Add(key is not null ? new KeyValuePair(key, (dynamic)argument) : argument); } } - - return parameters; + else + { + parameters.Add(key is not null ? new KeyValuePair(key, arguments) : arguments); + } } - public override object ProvideValue(IServiceProvider serviceProvider) - { - return this; - } + return parameters; + } + + public override object ProvideValue(IServiceProvider serviceProvider) + { + return this; } } \ No newline at end of file diff --git a/Framework/Avalonia/Markups/InvokeExtension.cs b/Framework/Avalonia/Markups/InvokeExtension.cs index b3f2f0f..c11ed7a 100644 --- a/Framework/Avalonia/Markups/InvokeExtension.cs +++ b/Framework/Avalonia/Markups/InvokeExtension.cs @@ -5,420 +5,419 @@ using Avalonia.Markup.Xaml; using System.Diagnostics.CodeAnalysis; using System.Reflection; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class InvokeExtension : TriggerExtension { - public class InvokeExtension : TriggerExtension + private static readonly AvaloniaProperty TargetProperty = + AvaloniaProperty.RegisterAttached("Target"); + + private readonly object path; + private readonly List parameters = new(); + + public InvokeExtension(object path) { - private static readonly AvaloniaProperty TargetProperty = - AvaloniaProperty.RegisterAttached("Target"); + this.path = path; + } - private readonly object path; - private readonly List parameters = new(); + public InvokeExtension(object path, + object args1) + { + this.path = path; - public InvokeExtension(object path) + parameters.Add(args1 is not MarkupExtension ? args1.ToBinding() : args1); + } + + public InvokeExtension(object path, + object args1, + object args2) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13, + object args14) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); + parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); + } + + public InvokeExtension(object path, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13, + object args14, + object args15) + { + this.path = path; + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); + parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); + parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding()); + } + + protected override void OnInvoked(object sender, EventArgs args) + { + if (sender is AvaloniaObject avaloniaObject) { - this.path = path; + CreaterHandler(avaloniaObject, args); } + } - public InvokeExtension(object path, - object args1) + private void CreaterHandler(AvaloniaObject sender, EventArgs args) + { + if (TryGetInvoke(sender, out (object? Target, MethodInfo? MethodInfo) invoker)) { - this.path = path; - - parameters.Add(args1 is not MarkupExtension ? args1.ToBinding() : args1); - } - - public InvokeExtension(object path, - object args1, - object args2) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13, - object args14) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); - parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); - } - - public InvokeExtension(object path, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13, - object args14, - object args15) - { - this.path = path; - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); - parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); - parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding()); - } - - protected override void OnInvoked(object sender, EventArgs args) - { - if (sender is AvaloniaObject avaloniaObject) + if (invoker.Target is object target) { - CreaterHandler(avaloniaObject, args); - } - } - - private void CreaterHandler(AvaloniaObject sender, EventArgs args) - { - if (TryGetInvoke(sender, out (object? Target, MethodInfo? MethodInfo) invoker)) - { - if (invoker.Target is object target) + if (invoker.MethodInfo is MethodInfo methodInfo) { - if (invoker.MethodInfo is MethodInfo methodInfo) + ParameterInfo[] parameterInfo = methodInfo.GetParameters(); + List parameters = new(); + + foreach (object? parameter in this.parameters) { - ParameterInfo[] parameterInfo = methodInfo.GetParameters(); - List parameters = new(); - - foreach (object? parameter in this.parameters) + switch (parameter) { - switch (parameter) - { - //case IParameter keyedParameter: - // BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding()); - // parameters.Add(new KeyValuePair(keyedParameter.Key, (dynamic)sender.GetValue(ParameterProperty))); - // break; - //case IEventParameter eventParameter: - // parameters.AddRange(eventParameter.GetParameters(args)); - // break; - //default: - // BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding()); - // parameters.Add((dynamic)sender.GetValue(ParameterProperty)); - // break; - } + //case IParameter keyedParameter: + // BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding()); + // parameters.Add(new KeyValuePair(keyedParameter.Key, (dynamic)sender.GetValue(ParameterProperty))); + // break; + //case IEventParameter eventParameter: + // parameters.AddRange(eventParameter.GetParameters(args)); + // break; + //default: + // BindingOperations.SetBinding(sender, ParameterProperty, parameter.ToBinding()); + // parameters.Add((dynamic)sender.GetValue(ParameterProperty)); + // break; } - - methodInfo.Invoke(target, parameters.Any() ? parameters.ToArray() : parameterInfo.Length > 0 ? new object?[] { null } : Array.Empty()); } + + methodInfo.Invoke(target, parameters.Any() ? parameters.ToArray() : parameterInfo.Length > 0 ? new object?[] { null } : Array.Empty()); } } } + } - private bool TryGetInvoke(AvaloniaObject sender, [AllowNull] out (object?, MethodInfo?) invoker) + private bool TryGetInvoke(AvaloniaObject sender, [AllowNull] out (object?, MethodInfo?) invoker) + { + if (path is Binding binding) { - if (path is Binding binding) + sender.Bind(TargetProperty, binding); + if (sender.GetValue(TargetProperty) is Action action) { - sender.Bind(TargetProperty, binding); - if (sender.GetValue(TargetProperty) is Action action) + invoker = new(action.Target, action.Method); + return true; + } + } + + if (path is string name) + { + if (sender.GetValue(StyledElement.DataContextProperty) is object dataContext) + { + if (dataContext.GetType().GetMethod(name, BindingFlags.Public | BindingFlags.Instance) is MethodInfo methodInfo) { - invoker = new(action.Target, action.Method); + invoker = new(dataContext, methodInfo); return true; } } - - if (path is string name) - { - if (sender.GetValue(StyledElement.DataContextProperty) is object dataContext) - { - if (dataContext.GetType().GetMethod(name, BindingFlags.Public | BindingFlags.Instance) is MethodInfo methodInfo) - { - invoker = new(dataContext, methodInfo); - return true; - } - } - } - - invoker = default; - return false; } + + invoker = default; + return false; } } \ No newline at end of file diff --git a/Framework/Avalonia/Markups/NavigateExtension.cs b/Framework/Avalonia/Markups/NavigateExtension.cs index 9eb9bf4..3ea6d5a 100644 --- a/Framework/Avalonia/Markups/NavigateExtension.cs +++ b/Framework/Avalonia/Markups/NavigateExtension.cs @@ -3,482 +3,482 @@ using Avalonia.Controls; using Avalonia.Data; using Avalonia.Markup.Xaml; using Mediator; +using Toolkit.Framework.Foundation; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class NavigateExtension : TriggerExtension { - public class NavigateExtension : TriggerExtension + private static readonly AttachedProperty MediatorProperty = + AvaloniaProperty.RegisterAttached("Mediator"); + + private static readonly AttachedProperty ParameterProperty = + AvaloniaProperty.RegisterAttached("Parameter"); + + private static readonly AvaloniaProperty RouteProperty = + AvaloniaProperty.RegisterAttached("Route"); + + private static readonly AvaloniaProperty ToProperty = + AvaloniaProperty.RegisterAttached("To"); + + private readonly Binding? mediatorBinding; + private readonly List parameters = new(); + private readonly Binding? toBinding; + private object? route; + private Binding? routeBinding; + + public NavigateExtension(object mediator, + object to) { - private static readonly AttachedProperty MediatorProperty = - AvaloniaProperty.RegisterAttached("Mediator"); + mediatorBinding = mediator.ToBinding(); + this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); + } - private static readonly AttachedProperty ParameterProperty = - AvaloniaProperty.RegisterAttached("Parameter"); + public NavigateExtension(object mediator, + object to, + object args1) + { + mediatorBinding = mediator.ToBinding(); + this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); - private static readonly AvaloniaProperty RouteProperty = - AvaloniaProperty.RegisterAttached("Route"); + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + } - private static readonly AvaloniaProperty ToProperty = - AvaloniaProperty.RegisterAttached("To"); + public NavigateExtension(object mediator, + object to, + object args1, + object args2) + { + mediatorBinding = mediator.ToBinding(); + this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); - private readonly Binding? mediatorBinding; - private readonly List parameters = new(); - private readonly Binding? toBinding; - private object? route; - private Binding? routeBinding; + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + parameters.Add(args2 is MarkupExtension ? args2 : args2.ToBinding()); + } - public NavigateExtension(object mediator, - object to) + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13, + object args14) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); + parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); + } + + public NavigateExtension(object mediator, + object to, + object args1, + object args2, + object args3, + object args4, + object args5, + object args6, + object args7, + object args8, + object args9, + object args10, + object args11, + object args12, + object args13, + object args14, + object args15) + { + 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()); + parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); + parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); + parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); + parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); + parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); + parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); + parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); + parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); + parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); + parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); + parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); + parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); + parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding()); + } + + public object? Route + { + get { - mediatorBinding = mediator.ToBinding(); - this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); + return route; } - - public NavigateExtension(object mediator, - object to, - object args1) + set { - mediatorBinding = mediator.ToBinding(); - this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); - - parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2) - { - 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 mediator, - object to, - object args1, - object args2, - object args3) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13, - object args14) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); - parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); - } - - public NavigateExtension(object mediator, - object to, - object args1, - object args2, - object args3, - object args4, - object args5, - object args6, - object args7, - object args8, - object args9, - object args10, - object args11, - object args12, - object args13, - object args14, - object args15) - { - 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()); - parameters.Add(args3 is MarkupExtension ? args3 : args3.ToBinding()); - parameters.Add(args4 is MarkupExtension ? args4 : args4.ToBinding()); - parameters.Add(args5 is MarkupExtension ? args5 : args5.ToBinding()); - parameters.Add(args6 is MarkupExtension ? args6 : args6.ToBinding()); - parameters.Add(args7 is MarkupExtension ? args7 : args7.ToBinding()); - parameters.Add(args8 is MarkupExtension ? args8 : args8.ToBinding()); - parameters.Add(args9 is MarkupExtension ? args9 : args9.ToBinding()); - parameters.Add(args10 is MarkupExtension ? args10 : args10.ToBinding()); - parameters.Add(args11 is MarkupExtension ? args11 : args11.ToBinding()); - parameters.Add(args12 is MarkupExtension ? args12 : args12.ToBinding()); - parameters.Add(args13 is MarkupExtension ? args13 : args13.ToBinding()); - parameters.Add(args14 is MarkupExtension ? args14 : args14.ToBinding()); - parameters.Add(args15 is MarkupExtension ? args15 : args15.ToBinding()); - } - - public object? Route - { - get + route = value; + if (route is not null) { - return route; + routeBinding = route.ToBinding(); } - set - { - route = value; - if (route is not null) - { - routeBinding = route.ToBinding(); - } - } - } - protected override void OnInvoked(object sender, EventArgs args) + } + + protected override void OnInvoked(object sender, EventArgs args) + { + if (TargetObject is not null) { - if (TargetObject is not null) + if (mediatorBinding is not null) { - if (mediatorBinding is not null) + TargetObject.Bind(MediatorProperty, mediatorBinding); + if (TargetObject.GetValue(MediatorProperty) is IMediator mediator) { - TargetObject.Bind(MediatorProperty, mediatorBinding); - if (TargetObject.GetValue(MediatorProperty) is IMediator mediator) + if (toBinding is not null) { - if (toBinding is not null) + TargetObject.Bind(ToProperty, toBinding); + if (TargetObject.GetValue(ToProperty) is { } to) { - TargetObject.Bind(ToProperty, toBinding); - if (TargetObject.GetValue(ToProperty) is { } to) + List? parameters = new(); + foreach (object? parameter in this.parameters) { - List? parameters = new(); - foreach (object? parameter in this.parameters) + if (parameter is not null) { - if (parameter is not null) + switch (parameter) { - switch (parameter) - { - case IParameter keyedParameter: - if (keyedParameter.GetValue(TargetObject) is KeyValuePair keyValuePair) - { - parameters.Add(keyValuePair); - } - break; - case IEventParameter eventParameter: - parameters.AddRange(eventParameter.GetValues(args)); - break; - default: - if (parameter.ToBinding() is Binding defaultDinding) - { - TargetObject.Bind(ParameterProperty, defaultDinding); - parameters.Add((dynamic)TargetObject.GetValue(ParameterProperty)); - } - break; - } + case IParameter keyedParameter: + if (keyedParameter.GetValue(TargetObject) is KeyValuePair keyValuePair) + { + parameters.Add(keyValuePair); + } + break; + case IEventParameter eventParameter: + parameters.AddRange(eventParameter.GetValues(args)); + break; + default: + if (parameter.ToBinding() is Binding defaultDinding) + { + TargetObject.Bind(ParameterProperty, defaultDinding); + parameters.Add((dynamic)TargetObject.GetValue(ParameterProperty)); + } + break; } } - - object? route = null; - if (routeBinding is not null) - { - TargetObject.Bind(RouteProperty, routeBinding); - route = TargetObject.GetValue(RouteProperty); - } - - if (to is string name) - { - if (toBinding?.StringFormat is string format) - { - name = string.Format(format, name); - } - - mediator.Send(new Navigate(name, parameters.ToArray()) { Route = route }); - } - - if (to is Type type) - { - mediator.Send(new Navigate(type, parameters.ToArray()) { Route = route }); - } } - } + object? route = null; + if (routeBinding is not null) + { + TargetObject.Bind(RouteProperty, routeBinding); + route = TargetObject.GetValue(RouteProperty); + } + + if (to is string name) + { + if (toBinding?.StringFormat is string format) + { + name = string.Format(format, name); + } + + mediator.Send(new Navigate(name, parameters.ToArray()) { Route = route }); + } + + if (to is Type type) + { + mediator.Send(new Navigate(type, parameters.ToArray()) { Route = route }); + } + } } - base.OnInvoked(sender, args); } + + base.OnInvoked(sender, args); } } } diff --git a/Framework/Avalonia/Markups/NavigationRouteExtension.cs b/Framework/Avalonia/Markups/NavigationRouteExtension.cs index fb182b7..6d83540 100644 --- a/Framework/Avalonia/Markups/NavigationRouteExtension.cs +++ b/Framework/Avalonia/Markups/NavigationRouteExtension.cs @@ -5,91 +5,91 @@ using Avalonia.Data; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Mediator; +using Toolkit.Framework.Foundation; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class NavigationRouteExtension : MarkupExtension { - public class NavigationRouteExtension : MarkupExtension + private static readonly AttachedProperty MediatorProperty = + AvaloniaProperty.RegisterAttached("Mediator"); + + private readonly string name; + private readonly Binding? mediatorBinding; + + public NavigationRouteExtension(object mediator, string name) { - private static readonly AttachedProperty MediatorProperty = - AvaloniaProperty.RegisterAttached("Mediator"); + mediatorBinding = mediator is Binding toBinding ? toBinding : mediator.ToBinding(); + this.name = name; + } - private readonly string name; - private readonly Binding? mediatorBinding; + private bool TryGetBinding(AvaloniaObject sender, out object? binding) + { + binding = sender.GetValue(StyledElement.DataContextProperty); + return binding is not null; + } - public NavigationRouteExtension(object mediator, string name) + public override object? ProvideValue(IServiceProvider serviceProvider) + { + if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target) { - mediatorBinding = mediator is Binding toBinding ? toBinding : mediator.ToBinding(); - this.name = name; - } - - private bool TryGetBinding(AvaloniaObject sender, out object? binding) - { - binding = sender.GetValue(StyledElement.DataContextProperty); - return binding is not null; - } - - public override object? ProvideValue(IServiceProvider serviceProvider) - { - if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target) + if (target.TargetObject is TemplatedControl control) { - if (target.TargetObject is TemplatedControl control) + 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; - 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.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) { - if (mediatorBinding is not null) + control.Bind(MediatorProperty, mediatorBinding); + if (control.GetValue(MediatorProperty) is IMediator mediator) { - control.Bind(MediatorProperty, mediatorBinding); - if (control.GetValue(MediatorProperty) is IMediator mediator) - { - mediator.Send(new NavigationRoute(name, control)); - control.ClearValue(MediatorProperty); - } + mediator.Send(new NavigationRoute(name, control)); + control.ClearValue(MediatorProperty); } } } - - control.Loaded += HandleLoaded; } - else + + control.DataContextChanged += HandleDataContextChanged; + + void HandleLoaded(object? sender, RoutedEventArgs args) { - if (mediatorBinding is not null) + control.Loaded -= HandleLoaded; + if (TryGetBinding(control, out binding)) { - control.Bind(MediatorProperty, mediatorBinding); - if (control.GetValue(MediatorProperty) is IMediator mediator) + if (mediatorBinding is not null) { - mediator.Send(new NavigationRoute(name, control)); - control.ClearValue(MediatorProperty); + 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); + } + } } } - - return null; } + + return null; } } \ No newline at end of file diff --git a/Framework/Avalonia/Markups/ParameterBindingExtension.cs b/Framework/Avalonia/Markups/ParameterBindingExtension.cs index 66c6209..d03acea 100644 --- a/Framework/Avalonia/Markups/ParameterBindingExtension.cs +++ b/Framework/Avalonia/Markups/ParameterBindingExtension.cs @@ -1,42 +1,42 @@ -using Avalonia.Controls; -using Avalonia; +using Avalonia; +using Avalonia.Controls; using Avalonia.Data; using Avalonia.Markup.Xaml; +using Toolkit.Framework.Foundation; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class ParameterBindingExtension : MarkupExtension, IParameter { - public class ParameterBindingExtension : MarkupExtension, IParameter + private static readonly AttachedProperty ValueProperty = + AvaloniaProperty.RegisterAttached("Value"); + + private readonly Binding? valueBinding; + + public ParameterBindingExtension(string key, object value) { - private static readonly AttachedProperty ValueProperty = - AvaloniaProperty.RegisterAttached("Value"); - - private readonly Binding? valueBinding; - - public ParameterBindingExtension(string key, object value) - { - Key = key; - valueBinding = value.ToBinding(); - } - - public string? Key { get; } - - public KeyValuePair? GetValue(object target) - { - if (target is AvaloniaObject avaloniaObject) - { - if (valueBinding is not null) - { - avaloniaObject.Bind(ValueProperty, valueBinding); - return new KeyValuePair(Key, (dynamic)avaloniaObject.GetValue(ValueProperty)); - } - } - - return default; - } - - public override object ProvideValue(IServiceProvider serviceProvider) - { - return this; - } + Key = key; + valueBinding = value.ToBinding(); } -} + + public string? Key { get; } + + public KeyValuePair? GetValue(object target) + { + if (target is AvaloniaObject avaloniaObject) + { + if (valueBinding is not null) + { + avaloniaObject.Bind(ValueProperty, valueBinding); + return new KeyValuePair(Key, (dynamic)avaloniaObject.GetValue(ValueProperty)); + } + } + + return default; + } + + public override object ProvideValue(IServiceProvider serviceProvider) + { + return this; + } +} \ No newline at end of file diff --git a/Framework/Avalonia/Markups/TriggerCollection.cs b/Framework/Avalonia/Markups/TriggerCollection.cs index f6213c4..4466573 100644 --- a/Framework/Avalonia/Markups/TriggerCollection.cs +++ b/Framework/Avalonia/Markups/TriggerCollection.cs @@ -1,15 +1,14 @@ using System.Collections.ObjectModel; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class TriggerCollection : Collection { - public class TriggerCollection : Collection + public void Add(object item) { - public void Add(object item) + if (item is Delegate trigger) { - if (item is Delegate trigger) - { - base.Add(trigger); - } + base.Add(trigger); } } } \ No newline at end of file diff --git a/Framework/Avalonia/Markups/TriggerExtension.cs b/Framework/Avalonia/Markups/TriggerExtension.cs index 0e664f6..0e9260c 100644 --- a/Framework/Avalonia/Markups/TriggerExtension.cs +++ b/Framework/Avalonia/Markups/TriggerExtension.cs @@ -1,76 +1,72 @@ using Avalonia; using Avalonia.Markup.Xaml; -using System; using System.Reflection; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class TriggerExtension : MarkupExtension { - public class TriggerExtension : MarkupExtension + public AvaloniaObject? TargetObject { get; protected set; } + + protected object? TargetInvoke { get; private set; } + + public void Invoke(object sender, EventArgs args) { - public AvaloniaObject? TargetObject { get; protected set; } + OnInvoked(sender, args); + } - protected object? TargetInvoke { get; private set; } - - public void Invoke(object sender, EventArgs args) + public override object? ProvideValue(IServiceProvider serviceProvider) + { + if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target) { - OnInvoked(sender, args); - } - - public override object? ProvideValue(IServiceProvider serviceProvider) - { - if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target) + if (target.TargetObject is AvaloniaObject avaloniaObject) { - if (target.TargetObject is AvaloniaObject avaloniaObject) + TargetObject = avaloniaObject; + } + else if (serviceProvider.GetService(typeof(IRootObjectProvider)) is IRootObjectProvider root) + { + TargetObject = (AvaloniaObject)root.RootObject; + } + + if (TargetObject is not null) + { + string? targetName = target.TargetProperty as string; + + TargetInvoke = target.TargetProperty; + OnAttached(serviceProvider); + + EventInfo? eventInfo = target.TargetProperty as EventInfo ?? (targetName is not null ? TargetObject.GetType().GetEvent(targetName) : null); + MethodInfo? methodInfo = eventInfo is not null ? null : target.TargetProperty as MethodInfo ?? (targetName is not null ? TargetObject.GetType().GetMethod(targetName) : null); + + MethodInfo invokeMethod = GetType().GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public)!; + if (invokeMethod is null) { - TargetObject = avaloniaObject; - } - else if (serviceProvider.GetService(typeof(IRootObjectProvider)) is IRootObjectProvider root) - { - TargetObject = (AvaloniaObject)root.RootObject; + return this; } - if (TargetObject is not null) + if (eventInfo is not null) { - string? targetName = target.TargetProperty as string; + return Delegate.CreateDelegate(eventInfo.EventHandlerType!, this, invokeMethod); + } - TargetInvoke = target.TargetProperty; - OnAttached(serviceProvider); - - EventInfo? eventInfo = target.TargetProperty as EventInfo ?? (targetName is not null ? TargetObject.GetType().GetEvent(targetName) : null); - MethodInfo? methodInfo = eventInfo is not null ? null : target.TargetProperty as MethodInfo ?? (targetName is not null ? TargetObject.GetType().GetMethod(targetName) : null); - - MethodInfo invokeMethod = GetType().GetMethod("Invoke", BindingFlags.Instance | BindingFlags.Public)!; - if (invokeMethod is null) + if (methodInfo is not null) + { + if (methodInfo.GetParameters() is ParameterInfo[] methodParameters && methodParameters is { Length: 2 }) { - return this; - } - - if (eventInfo is not null) - { - return Delegate.CreateDelegate(eventInfo.EventHandlerType!, this, invokeMethod); - } - - if (methodInfo is not null) - { - if (methodInfo.GetParameters() is ParameterInfo[] methodParameters && methodParameters is { Length: 2 }) - { - return Delegate.CreateDelegate(methodParameters[1].ParameterType, this, invokeMethod); - } + return Delegate.CreateDelegate(methodParameters[1].ParameterType, this, invokeMethod); } } } - - return null; } - protected virtual void OnAttached(IServiceProvider serviceProvider) - { + return null; + } - } + protected virtual void OnAttached(IServiceProvider serviceProvider) + { + } - protected virtual void OnInvoked(object sender, EventArgs args) - { - - } + protected virtual void OnInvoked(object sender, EventArgs args) + { } } \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/ContentControlNavigation.cs b/Framework/Avalonia/Navigation/ContentControlNavigation.cs index d5bee32..6f34662 100644 --- a/Framework/Avalonia/Navigation/ContentControlNavigation.cs +++ b/Framework/Avalonia/Navigation/ContentControlNavigation.cs @@ -1,14 +1,13 @@ using Avalonia.Controls; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public record ContentControlNavigation : Navigation { - public record ContentControlNavigation : Navigation + public ContentControlNavigation(ContentControl route, + object? content, + object? template, + IDictionary? parameters) : base(route, content, template, parameters) { - public ContentControlNavigation(ContentControl route, - object? content, - object? template, - IDictionary? parameters) : base(route, content, template, parameters) - { - } } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/ContentControlNavigationHandler.cs b/Framework/Avalonia/Navigation/ContentControlNavigationHandler.cs index e2f3a1f..501d277 100644 --- a/Framework/Avalonia/Navigation/ContentControlNavigationHandler.cs +++ b/Framework/Avalonia/Navigation/ContentControlNavigationHandler.cs @@ -1,19 +1,18 @@ 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; - } +namespace Toolkit.Foundation.Avalonia; - return await Task.FromResult(true); +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); } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/ContentDialogNavigation.cs b/Framework/Avalonia/Navigation/ContentDialogNavigation.cs index 44b424b..bbad968 100644 --- a/Framework/Avalonia/Navigation/ContentDialogNavigation.cs +++ b/Framework/Avalonia/Navigation/ContentDialogNavigation.cs @@ -1,15 +1,13 @@ 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) - { +namespace Toolkit.Foundation.Avalonia; - } +public record ContentDialogNavigation : Navigation +{ + public ContentDialogNavigation(ContentDialog route, + object? content, + object? template, + IDictionary? parameters) : base(route, content, template, parameters) + { } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/ContentDialogNavigationHandler.cs b/Framework/Avalonia/Navigation/ContentDialogNavigationHandler.cs index 6b020f1..689e4a2 100644 --- a/Framework/Avalonia/Navigation/ContentDialogNavigationHandler.cs +++ b/Framework/Avalonia/Navigation/ContentDialogNavigationHandler.cs @@ -1,44 +1,43 @@ using FluentAvalonia.UI.Controls; using Mediator; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class ContentDialogNavigationHandler : IRequestHandler { - public class ContentDialogNavigationHandler : IRequestHandler + public async ValueTask Handle(ContentDialogNavigation request, CancellationToken cancellationToken) { - public async ValueTask Handle(ContentDialogNavigation request, CancellationToken cancellationToken) + if (request.Template is ContentDialog contentDialog) { - if (request.Template is ContentDialog contentDialog) + async void HandleButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) { - async void HandleButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) + ContentDialogButtonClickDeferral defferal = args.GetDeferral(); + if (sender.DataContext is INavigationConfirmation confirmation) { - ContentDialogButtonClickDeferral defferal = args.GetDeferral(); - if (sender.DataContext is INavigationConfirmation confirmation) + if (!await confirmation.CanConfirm()) { - if (!await confirmation.CanConfirm()) - { - args.Cancel = true; - } + 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; + if (!args.Cancel) + { + contentDialog.SecondaryButtonClick -= HandleButtonClick; + contentDialog.PrimaryButtonClick -= HandleButtonClick; + contentDialog.CloseButtonClick -= HandleButtonClick; + } - contentDialog.DataContext = request.Content; - await contentDialog.ShowAsync(); + defferal.Complete(); } - return await Task.FromResult(true); + contentDialog.SecondaryButtonClick += HandleButtonClick; + contentDialog.PrimaryButtonClick += HandleButtonClick; + contentDialog.CloseButtonClick += HandleButtonClick; + + contentDialog.DataContext = request.Content; + await contentDialog.ShowAsync(); } + + return await Task.FromResult(true); } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/FrameNavigation.cs b/Framework/Avalonia/Navigation/FrameNavigation.cs index b0358b0..3210d28 100644 --- a/Framework/Avalonia/Navigation/FrameNavigation.cs +++ b/Framework/Avalonia/Navigation/FrameNavigation.cs @@ -1,15 +1,14 @@ using FluentAvalonia.UI.Controls; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public record FrameNavigation : Navigation { - public record FrameNavigation : Navigation + public FrameNavigation(Frame route, + object? content, + object? template, + IDictionary? + parameters) : base(route, content, template, parameters) { - public FrameNavigation(Frame route, - object? content, - object? template, - IDictionary? - parameters) : base(route, content, template, parameters) - { - } } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/FrameNavigationHandler.cs b/Framework/Avalonia/Navigation/FrameNavigationHandler.cs index 4a4fd7f..ad65a74 100644 --- a/Framework/Avalonia/Navigation/FrameNavigationHandler.cs +++ b/Framework/Avalonia/Navigation/FrameNavigationHandler.cs @@ -2,32 +2,31 @@ using FluentAvalonia.UI.Navigation; using Mediator; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class FrameNavigationHandler : IRequestHandler { - public class FrameNavigationHandler : IRequestHandler + public async ValueTask Handle(FrameNavigation request, CancellationToken cancellationToken) { - public async ValueTask Handle(FrameNavigation request, CancellationToken cancellationToken) + request.Route.NavigationPageFactory = new NavigationPageFactory(); + + TaskCompletionSource completionSource = new(); + if (request.Template is TemplatedControl content) { - request.Route.NavigationPageFactory = new NavigationPageFactory(); - - TaskCompletionSource completionSource = new(); - if (request.Template is TemplatedControl content) + void HandleNavigated(object sender, NavigationEventArgs args) { - void HandleNavigated(object sender, NavigationEventArgs args) + request.Route.Navigated -= HandleNavigated; + if (request.Route.Content is TemplatedControl control) { - request.Route.Navigated -= HandleNavigated; - if (request.Route.Content is TemplatedControl control) - { - control.DataContext = request.Content; - completionSource.SetResult(true); - } + control.DataContext = request.Content; + completionSource.SetResult(true); } - - request.Route.Navigated += HandleNavigated; - request.Route.NavigateFromObject(content); } - return await completionSource.Task; + request.Route.Navigated += HandleNavigated; + request.Route.NavigateFromObject(content); } + + return await completionSource.Task; } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/NavigateBackHandler.cs b/Framework/Avalonia/Navigation/NavigateBackHandler.cs index 45837e6..2b5a248 100644 --- a/Framework/Avalonia/Navigation/NavigateBackHandler.cs +++ b/Framework/Avalonia/Navigation/NavigateBackHandler.cs @@ -2,37 +2,37 @@ using Avalonia.Controls.Primitives; using FluentAvalonia.UI.Controls; using Mediator; +using Toolkit.Framework.Foundation; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class NavigateBackHandler : IRequestHandler { - public class NavigateBackHandler : IRequestHandler + private readonly INavigationRouteDescriptorCollection descriptors; + + public NavigateBackHandler(INavigationRouteDescriptorCollection descriptors) { - private readonly INavigationRouteDescriptorCollection descriptors; + this.descriptors = descriptors; + } - public NavigateBackHandler(INavigationRouteDescriptorCollection descriptors) + public ValueTask Handle(NavigateBack request, CancellationToken cancellationToken) + { + if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) { - 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 (descriptor.Route is ContentControl { Content: TemplatedControl content }) + if (content.DataContext is IDisposable disposable) { - if (content.DataContext is IDisposable disposable) - { - disposable.Dispose(); - } - } - - if (descriptor.Route is Frame frame) - { - frame.GoBack(); + disposable.Dispose(); } } - return default; + if (descriptor.Route is Frame frame) + { + frame.GoBack(); + } } + + return default; } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/NavigateHandler.cs b/Framework/Avalonia/Navigation/NavigateHandler.cs index 7be55a6..03563f4 100644 --- a/Framework/Avalonia/Navigation/NavigateHandler.cs +++ b/Framework/Avalonia/Navigation/NavigateHandler.cs @@ -1,116 +1,116 @@ using Avalonia.Controls; using FluentAvalonia.UI.Controls; using Mediator; +using Toolkit.Framework.Foundation; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class NavigateHandler : IRequestHandler { - public class NavigateHandler : IRequestHandler + private readonly INavigationRouteDescriptorCollection descriptors; + private readonly IMediator mediator; + private readonly INamedDataTemplateFactory namedDataTemplateFactory; + private readonly INamedTemplateFactory namedTemplateFactory; + private readonly ITemplateFactory templateFactory; + private readonly ITypedDataTemplateFactory typedDataTemplateFactory; + + public NavigateHandler(IMediator mediator, + ITemplateFactory templateFactory, + INamedTemplateFactory namedTemplateFactory, + INamedDataTemplateFactory namedDataTemplateFactory, + ITypedDataTemplateFactory typedDataTemplateFactory, + INavigationRouteDescriptorCollection descriptors) { - private readonly INavigationRouteDescriptorCollection descriptors; - private readonly IMediator mediator; - private readonly INamedDataTemplateFactory namedDataTemplateFactory; - private readonly INamedTemplateFactory namedTemplateFactory; - private readonly ITemplateFactory templateFactory; - private readonly ITypedDataTemplateFactory typedDataTemplateFactory; + this.mediator = mediator; + this.templateFactory = templateFactory; + this.namedTemplateFactory = namedTemplateFactory; + this.namedDataTemplateFactory = namedDataTemplateFactory; + this.typedDataTemplateFactory = typedDataTemplateFactory; + this.descriptors = descriptors; + } - public NavigateHandler(IMediator mediator, - ITemplateFactory templateFactory, - INamedTemplateFactory namedTemplateFactory, - INamedDataTemplateFactory namedDataTemplateFactory, - ITypedDataTemplateFactory typedDataTemplateFactory, - INavigationRouteDescriptorCollection descriptors) + public async ValueTask Handle(Navigate request, CancellationToken cancellationToken) + { + object? content = null; + object? template = null; + + Dictionary keyedParameters = new(); + List parameters = new(); + + foreach (object? parameter in request.Parameters) { - this.mediator = mediator; - this.templateFactory = templateFactory; - this.namedTemplateFactory = namedTemplateFactory; - this.namedDataTemplateFactory = namedDataTemplateFactory; - this.typedDataTemplateFactory = typedDataTemplateFactory; - this.descriptors = descriptors; - } - - public async ValueTask Handle(Navigate request, CancellationToken cancellationToken) - { - object? content = null; - object? template = null; - - Dictionary keyedParameters = new(); - List parameters = new(); - - foreach (object? parameter in request.Parameters) + if (parameter is not null) { - if (parameter is not null) + if (parameter is KeyValuePair keyed) { - if (parameter is KeyValuePair keyed) - { - keyedParameters.Add(keyed.Key, keyed.Value); - } - else - { - parameters.Add(parameter); - } - } - } - - if (request.Name is { Length: > 0 } name) - { - content = namedDataTemplateFactory.Create(name, parameters.ToArray()); - template = namedTemplateFactory.Create(name); - } - - if (request.Type is Type type) - { - content = typedDataTemplateFactory.Create(type, parameters.ToArray()); - template = templateFactory.Create(content); - } - - if (template is not null) - { - object? target = null; - if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) - { - target = descriptor.Route; + keyedParameters.Add(keyed.Key, keyed.Value); } else { - target = template; + parameters.Add(parameter); } + } + } - bool hasNavigated = false; - if (target is Frame frame) - { - hasNavigated = await mediator.Send(new FrameNavigation(frame, content, template, keyedParameters)); - } + if (request.Name is { Length: > 0 } name) + { + content = namedDataTemplateFactory.Create(name, parameters.ToArray()); + template = namedTemplateFactory.Create(name); + } - if (target is ContentDialog dialog) - { - hasNavigated = await mediator.Send(new ContentDialogNavigation(dialog, content, template, keyedParameters)); - } + if (request.Type is Type type) + { + content = typedDataTemplateFactory.Create(type, parameters.ToArray()); + template = templateFactory.Create(content); + } - if (target is ContentControl contentControl) - { - hasNavigated = await mediator.Send(new ContentControlNavigation(contentControl, content, template, keyedParameters)); - } - - if (hasNavigated) - { - if (content is INavigated navigated) - { - await navigated.Navigated(); - } - } + if (template is not null) + { + object? target = null; + if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) + { + target = descriptor.Route; } else { - if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) - { - if (descriptor.Route is ContentControl contentControl) - { - contentControl.Content = null; - } - } + target = template; } - return default; + bool hasNavigated = false; + if (target is Frame frame) + { + hasNavigated = await mediator.Send(new FrameNavigation(frame, content, template, keyedParameters)); + } + + if (target is ContentDialog dialog) + { + hasNavigated = await mediator.Send(new ContentDialogNavigation(dialog, content, template, keyedParameters)); + } + + if (target is ContentControl contentControl) + { + hasNavigated = await mediator.Send(new ContentControlNavigation(contentControl, content, template, keyedParameters)); + } + + if (hasNavigated) + { + if (content is INavigated navigated) + { + await navigated.Navigated(); + } + } } + else + { + if (descriptors.FirstOrDefault(x => request.Route is string { } name && name == x.Name) is NavigationRouteDescriptor descriptor) + { + if (descriptor.Route is ContentControl contentControl) + { + contentControl.Content = null; + } + } + } + + return default; } -} +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/Navigation.cs b/Framework/Avalonia/Navigation/Navigation.cs index 593e372..20d757d 100644 --- a/Framework/Avalonia/Navigation/Navigation.cs +++ b/Framework/Avalonia/Navigation/Navigation.cs @@ -1,27 +1,26 @@ using Avalonia.Controls.Primitives; using Mediator; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public record Navigation : IRequest where TRoute : TemplatedControl { - public record Navigation : IRequest where TRoute : TemplatedControl + public TRoute Route { get; } + + public Navigation(TRoute route, + object? content, + object? template, + IDictionary? parameters) { - 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; } + Route = route; + Content = content; + Template = template; + Parameters = parameters; } -} + + public object? Content { get; } + + public object? Template { get; } + + public IDictionary? Parameters { get; } +} \ No newline at end of file diff --git a/Framework/Avalonia/Navigation/NavigationPageFactory.cs b/Framework/Avalonia/Navigation/NavigationPageFactory.cs index 58b4d1b..4a0d935 100644 --- a/Framework/Avalonia/Navigation/NavigationPageFactory.cs +++ b/Framework/Avalonia/Navigation/NavigationPageFactory.cs @@ -1,18 +1,17 @@ using FluentAvalonia.UI.Controls; using Avalonia.Controls; -namespace Toolkit.Foundation.Avalonia -{ - internal class NavigationPageFactory : INavigationPageFactory - { - public IControl? GetPage(Type srcType) - { - return default; - } +namespace Toolkit.Foundation.Avalonia; - public IControl GetPageFromObject(object target) - { - return (IControl)target; - } +internal class NavigationPageFactory : INavigationPageFactory +{ + public IControl? GetPage(Type srcType) + { + return default; + } + + public IControl GetPageFromObject(object target) + { + return (IControl)target; } } diff --git a/Framework/Avalonia/Navigation/NavigationRouteHandler.cs b/Framework/Avalonia/Navigation/NavigationRouteHandler.cs index 3b190e8..25560e4 100644 --- a/Framework/Avalonia/Navigation/NavigationRouteHandler.cs +++ b/Framework/Avalonia/Navigation/NavigationRouteHandler.cs @@ -1,39 +1,39 @@ using Avalonia.Controls.Primitives; using Avalonia.Interactivity; using Mediator; +using Toolkit.Framework.Foundation; -namespace Toolkit.Foundation.Avalonia +namespace Toolkit.Foundation.Avalonia; + +public class NavigationRouteHandler : IRequestHandler { - public class NavigationRouteHandler : IRequestHandler + private readonly INavigationRouteDescriptorCollection descriptors; + + public NavigationRouteHandler(INavigationRouteDescriptorCollection descriptors) { - private readonly INavigationRouteDescriptorCollection descriptors; + this.descriptors = descriptors; + } - public NavigationRouteHandler(INavigationRouteDescriptorCollection descriptors) + public ValueTask Handle(NavigationRoute request, CancellationToken cancellationToken) + { + if (request.Route is TemplatedControl control) { - this.descriptors = descriptors; - } - - public ValueTask Handle(NavigationRoute request, CancellationToken cancellationToken) - { - if (request.Route is TemplatedControl control) + void HandleUnloaded(object? sender, RoutedEventArgs args) { - void HandleUnloaded(object? sender, RoutedEventArgs args) + if (descriptors.FirstOrDefault(x => x.Route == sender) is INavigationRouteDescriptor descriptor) { - if (descriptors.FirstOrDefault(x => x.Route == sender) is INavigationRouteDescriptor descriptor) - { - descriptors.Remove(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; + 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/Framework/Avalonia/Templates/TemplateSelector.cs b/Framework/Avalonia/Templates/TemplateSelector.cs index b0cb881..5d6ff9c 100644 --- a/Framework/Avalonia/Templates/TemplateSelector.cs +++ b/Framework/Avalonia/Templates/TemplateSelector.cs @@ -1,5 +1,6 @@ -using Avalonia.Controls.Templates; -using Avalonia.Controls; +using Avalonia.Controls; +using Avalonia.Controls.Templates; +using Toolkit.Framework.Foundation; namespace Toolkit.Foundation.Avalonia { @@ -34,4 +35,4 @@ namespace Toolkit.Foundation.Avalonia return true; } } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/ConfigurationChanged.cs b/Framework/Foundation/Configurations/ConfigurationChanged.cs index 6248860..90202ec 100644 --- a/Framework/Foundation/Configurations/ConfigurationChanged.cs +++ b/Framework/Foundation/Configurations/ConfigurationChanged.cs @@ -1,3 +1,3 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; -public record ConfigurationChanged(TConfiguration Configuration) where TConfiguration : class; +public record ConfigurationChanged(TConfiguration Configuration) where TConfiguration : class; \ No newline at end of file diff --git a/Framework/Foundation/Configurations/ConfigurationInitializer.cs b/Framework/Foundation/Configurations/ConfigurationInitializer.cs index f5fe0cf..49206d4 100644 --- a/Framework/Foundation/Configurations/ConfigurationInitializer.cs +++ b/Framework/Foundation/Configurations/ConfigurationInitializer.cs @@ -1,6 +1,6 @@ using Mediator; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class ConfigurationInitializer : IInitializable where TConfiguration : class, new() { @@ -19,4 +19,4 @@ public class ConfigurationInitializer : IInitializable where TCo await mediator.Send(configuration); await Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/ConfigurationWriter.cs b/Framework/Foundation/Configurations/ConfigurationWriter.cs index 4ebffb9..e982577 100644 --- a/Framework/Foundation/Configurations/ConfigurationWriter.cs +++ b/Framework/Foundation/Configurations/ConfigurationWriter.cs @@ -2,7 +2,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class ConfigurationWriter : IConfigurationWriter where TConfiguration : class, new() { diff --git a/Framework/Foundation/Configurations/IConfigurationWriter.cs b/Framework/Foundation/Configurations/IConfigurationWriter.cs index 4114619..bd4888b 100644 --- a/Framework/Foundation/Configurations/IConfigurationWriter.cs +++ b/Framework/Foundation/Configurations/IConfigurationWriter.cs @@ -1,6 +1,6 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public interface IConfigurationWriter where TConfiguration : class { void Write(string section, TConfiguration args); -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/IWritableConfigurationProvider.cs b/Framework/Foundation/Configurations/IWritableConfigurationProvider.cs index a538d4f..44dd4c5 100644 --- a/Framework/Foundation/Configurations/IWritableConfigurationProvider.cs +++ b/Framework/Foundation/Configurations/IWritableConfigurationProvider.cs @@ -1,6 +1,6 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public interface IWritableConfigurationProvider { void Write(string section, TValue value) where TValue : class, new(); -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/IWritableJsonConfigurationBuilder.cs b/Framework/Foundation/Configurations/IWritableJsonConfigurationBuilder.cs index 3c0eeef..061a498 100644 --- a/Framework/Foundation/Configurations/IWritableJsonConfigurationBuilder.cs +++ b/Framework/Foundation/Configurations/IWritableJsonConfigurationBuilder.cs @@ -1,4 +1,4 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public interface IWritableJsonConfigurationBuilder { @@ -9,4 +9,4 @@ public interface IWritableJsonConfigurationBuilder IWritableJsonConfigurationBuilder AddDefaultFileStream(Stream stream); void Build(string path); -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/IWritableJsonConfigurationDescriptor.cs b/Framework/Foundation/Configurations/IWritableJsonConfigurationDescriptor.cs index 20e1d2b..15e5eea 100644 --- a/Framework/Foundation/Configurations/IWritableJsonConfigurationDescriptor.cs +++ b/Framework/Foundation/Configurations/IWritableJsonConfigurationDescriptor.cs @@ -1,8 +1,8 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public interface IWritableJsonConfigurationDescriptor { Type ConfigurationType { get; } string Key { get; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationBuilder.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationBuilder.cs index 6506e52..9dd1c80 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationBuilder.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationBuilder.cs @@ -1,16 +1,13 @@ using Json.Patch; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; -using System.IO; using System.Text.Json; using System.Text.Json.Serialization; using JsonSerializer = System.Text.Json.JsonSerializer; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class WritableJsonConfigurationBuilder : IWritableJsonConfigurationBuilder { @@ -105,4 +102,4 @@ public class WritableJsonConfigurationBuilder : IWritableJsonConfigurationBuilde content = null; return false; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationDescriptor.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationDescriptor.cs index 4da65d9..67f66af 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationDescriptor.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationDescriptor.cs @@ -1,3 +1,3 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; -public record WritableJsonConfigurationDescriptor(Type ConfigurationType, string Key) : IWritableJsonConfigurationDescriptor; +public record WritableJsonConfigurationDescriptor(Type ConfigurationType, string Key) : IWritableJsonConfigurationDescriptor; \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationExtensions.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationExtensions.cs index 9804e41..1094ba6 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationExtensions.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationExtensions.cs @@ -1,7 +1,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.FileProviders; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public static class WritableJsonConfigurationExtensions { @@ -71,4 +71,4 @@ public static class WritableJsonConfigurationExtensions } public static IConfigurationBuilder AddWritableJsonFile(this IConfigurationBuilder builder, Action configureSource) => builder.Add(configureSource); -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationFile.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationFile.cs index 9bf2d58..e41886a 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationFile.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationFile.cs @@ -3,7 +3,7 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Text.Json; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; internal class WritableJsonConfigurationFile { @@ -145,4 +145,4 @@ internal class WritableJsonConfigurationFile throw new FormatException(); } } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs index c58c6ce..868c7ba 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationProvider.cs @@ -3,13 +3,12 @@ using Microsoft.Extensions.FileProviders; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class WritableJsonConfigurationProvider : JsonConfigurationProvider, IWritableConfigurationProvider { public WritableJsonConfigurationProvider(JsonConfigurationSource source) : base(source) { - } public void Write(string section, TValue value) where TValue : class, new() @@ -43,4 +42,4 @@ public class WritableJsonConfigurationProvider : JsonConfigurationProvider, IWri document.WriteTo(writer); } } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs b/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs index 25bd255..fcfa1a3 100644 --- a/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs +++ b/Framework/Foundation/Configurations/WritableJsonConfigurationSource.cs @@ -1,8 +1,8 @@ -using Microsoft.Extensions.Configuration.Json; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration.Json; using Microsoft.Extensions.FileProviders; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class WritableJsonConfigurationSource : JsonConfigurationSource { @@ -24,4 +24,4 @@ public class WritableJsonConfigurationSource : JsonConfigurationSource Factory?.Build(outputFile); } } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Configurations/Write.cs b/Framework/Foundation/Configurations/Write.cs index e8fe169..8e05d0a 100644 --- a/Framework/Foundation/Configurations/Write.cs +++ b/Framework/Foundation/Configurations/Write.cs @@ -1,5 +1,5 @@ using Mediator; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; -public abstract record Write(string Section, Action UpdateDelegate) : IRequest where TConfiguration : class; +public abstract record Write(string Section, Action UpdateDelegate) : IRequest where TConfiguration : class; \ No newline at end of file diff --git a/Framework/Foundation/Configurations/WriteHandler.cs b/Framework/Foundation/Configurations/WriteHandler.cs index 00973d7..dafe029 100644 --- a/Framework/Foundation/Configurations/WriteHandler.cs +++ b/Framework/Foundation/Configurations/WriteHandler.cs @@ -1,6 +1,6 @@ using Mediator; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class WriteHandler : IRequestHandler> where TConfiguration : class { @@ -26,4 +26,4 @@ public class WriteHandler : IRequestHandler(provider => new ServiceFactory(provider.GetService, (instanceType, parameters) => ActivatorUtilities.CreateInstance(provider, instanceType, parameters!))) @@ -27,4 +26,4 @@ public static class IServiceCollectionExtensions return serviceCollection; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Extensions/IServiceFactoryExtensions.cs b/Framework/Foundation/Extensions/IServiceFactoryExtensions.cs index f84d760..42c455f 100644 --- a/Framework/Foundation/Extensions/IServiceFactoryExtensions.cs +++ b/Framework/Foundation/Extensions/IServiceFactoryExtensions.cs @@ -1,4 +1,4 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public static class IServiceFactoryExtensions { @@ -12,4 +12,4 @@ public static class IServiceFactoryExtensions ServiceFactoryDescriptor? descriptor = new(serviceFactory); return descriptor.Create(type); } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/AppService.cs b/Framework/Foundation/Lifecycles/AppService.cs index 946a87a..94b8d8c 100644 --- a/Framework/Foundation/Lifecycles/AppService.cs +++ b/Framework/Foundation/Lifecycles/AppService.cs @@ -1,7 +1,7 @@ using Mediator; using Microsoft.Extensions.Hosting; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class AppService : IHostedService { @@ -22,4 +22,4 @@ public class AppService : IHostedService { return Task.CompletedTask; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/ICache.cs b/Framework/Foundation/Lifecycles/ICache.cs index 1521b2a..ad44126 100644 --- a/Framework/Foundation/Lifecycles/ICache.cs +++ b/Framework/Foundation/Lifecycles/ICache.cs @@ -1,6 +1,5 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public interface ICache { - -} +} \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/IInitializable.cs b/Framework/Foundation/Lifecycles/IInitializable.cs index a6f053b..909a2c2 100644 --- a/Framework/Foundation/Lifecycles/IInitializable.cs +++ b/Framework/Foundation/Lifecycles/IInitializable.cs @@ -1,6 +1,6 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public interface IInitializable { Task InitializeAsync(); -} +} \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/IInitialization.cs b/Framework/Foundation/Lifecycles/IInitialization.cs index ee2e2ef..392fcdf 100644 --- a/Framework/Foundation/Lifecycles/IInitialization.cs +++ b/Framework/Foundation/Lifecycles/IInitialization.cs @@ -1,6 +1,6 @@ -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public interface IInitialization { Task InitializeAsync(); -} +} \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/Initialization.cs b/Framework/Foundation/Lifecycles/Initialization.cs index f7febce..febe1ec 100644 --- a/Framework/Foundation/Lifecycles/Initialization.cs +++ b/Framework/Foundation/Lifecycles/Initialization.cs @@ -1,6 +1,6 @@ using System.Diagnostics; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class Initialization : IInitialization { @@ -23,4 +23,4 @@ public class Initialization : IInitialization } } } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/Initialize.cs b/Framework/Foundation/Lifecycles/Initialize.cs index d93328e..c58a640 100644 --- a/Framework/Foundation/Lifecycles/Initialize.cs +++ b/Framework/Foundation/Lifecycles/Initialize.cs @@ -1,5 +1,5 @@ using Mediator; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; -public record Initialize : IRequest; +public record Initialize : IRequest; \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/InitializeHandler.cs b/Framework/Foundation/Lifecycles/InitializeHandler.cs index e5dbef3..b750e13 100644 --- a/Framework/Foundation/Lifecycles/InitializeHandler.cs +++ b/Framework/Foundation/Lifecycles/InitializeHandler.cs @@ -1,6 +1,6 @@ using Mediator; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; public class InitializeHandler : IRequestHandler { @@ -16,4 +16,4 @@ public class InitializeHandler : IRequestHandler await initialization.InitializeAsync(); return default; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Lifecycles/Initialized.cs b/Framework/Foundation/Lifecycles/Initialized.cs index a13bbce..842880d 100644 --- a/Framework/Foundation/Lifecycles/Initialized.cs +++ b/Framework/Foundation/Lifecycles/Initialized.cs @@ -1,5 +1,5 @@ using Mediator; -namespace Toolkit.Foundation; +namespace Toolkit.Framework.Foundation; -public record class Initialized : IRequest; +public record class Initialized : IRequest; \ No newline at end of file diff --git a/Framework/Foundation/Navigation/IEventParameter.cs b/Framework/Foundation/Navigation/IEventParameter.cs index 226c0b6..320adce 100644 --- a/Framework/Foundation/Navigation/IEventParameter.cs +++ b/Framework/Foundation/Navigation/IEventParameter.cs @@ -1,10 +1,6 @@ -using System; -using System.Collections.Generic; +namespace Toolkit.Foundation; -namespace Toolkit.Foundation +public interface IEventParameter { - public interface IEventParameter - { - List GetValues(EventArgs args); - } + List GetValues(EventArgs args); } \ No newline at end of file diff --git a/Framework/Foundation/Navigation/INavigationConfirmation.cs b/Framework/Foundation/Navigation/INavigationConfirmation.cs index 2d8737c..4143657 100644 --- a/Framework/Foundation/Navigation/INavigationConfirmation.cs +++ b/Framework/Foundation/Navigation/INavigationConfirmation.cs @@ -1,13 +1,11 @@ - -namespace Toolkit.Foundation -{ - public interface INavigationConfirmation - { - ValueTask CanConfirm(); - } +namespace Toolkit.Foundation; - public interface INavigated - { - ValueTask Navigated(); - } +public interface INavigationConfirmation +{ + ValueTask CanConfirm(); +} + +public interface INavigated +{ + ValueTask Navigated(); } \ No newline at end of file diff --git a/Framework/Foundation/Navigation/INavigationRouteDescriptor.cs b/Framework/Foundation/Navigation/INavigationRouteDescriptor.cs index 8288166..46f40ad 100644 --- a/Framework/Foundation/Navigation/INavigationRouteDescriptor.cs +++ b/Framework/Foundation/Navigation/INavigationRouteDescriptor.cs @@ -1,9 +1,8 @@ -namespace Toolkit.Foundation -{ - public interface INavigationRouteDescriptor - { - object Route { get; } +namespace Toolkit.Framework.Foundation; - string? Name { get; } - } +public interface INavigationRouteDescriptor +{ + object Route { get; } + + string? Name { get; } } \ No newline at end of file diff --git a/Framework/Foundation/Navigation/INavigationRouteDescriptorCollection.cs b/Framework/Foundation/Navigation/INavigationRouteDescriptorCollection.cs index 818e746..223feb9 100644 --- a/Framework/Foundation/Navigation/INavigationRouteDescriptorCollection.cs +++ b/Framework/Foundation/Navigation/INavigationRouteDescriptorCollection.cs @@ -1,8 +1,5 @@ -using System.Collections.Generic; +namespace Toolkit.Framework.Foundation; -namespace Toolkit.Foundation +public interface INavigationRouteDescriptorCollection : IList { - public interface INavigationRouteDescriptorCollection : IList - { - } } \ No newline at end of file diff --git a/Framework/Foundation/Navigation/IParameter.cs b/Framework/Foundation/Navigation/IParameter.cs index 07588fa..1e876a9 100644 --- a/Framework/Foundation/Navigation/IParameter.cs +++ b/Framework/Foundation/Navigation/IParameter.cs @@ -1,9 +1,8 @@ -namespace Toolkit.Foundation -{ - public interface IParameter - { - string? Key { get; } +namespace Toolkit.Framework.Foundation; - KeyValuePair? GetValue(object target); - } +public interface IParameter +{ + string? Key { get; } + + KeyValuePair? GetValue(object target); } \ No newline at end of file diff --git a/Framework/Foundation/Navigation/Navigate.cs b/Framework/Foundation/Navigation/Navigate.cs index 1d6fe06..35005f3 100644 --- a/Framework/Foundation/Navigation/Navigate.cs +++ b/Framework/Foundation/Navigation/Navigate.cs @@ -1,29 +1,28 @@ using Mediator; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public record Navigate : IRequest { - public record Navigate : IRequest + public Navigate(string name, params object?[] parameters) { - public Navigate(string name, params object?[] parameters) - { - Name = name; - Parameters = parameters; - } - - public Navigate(Type type, params object?[] parameters) - { - Type = type; - Parameters = parameters; - } - - public Type? Type { get; } - - public object? Route { get; init; } - - public string? Name { get; } - - public string? FriendlyName { get; init; } - - public object?[] Parameters { get; } + Name = name; + Parameters = parameters; } + + public Navigate(Type type, params object?[] parameters) + { + Type = type; + Parameters = parameters; + } + + public Type? Type { get; } + + public object? Route { get; init; } + + public string? Name { get; } + + public string? FriendlyName { get; init; } + + public object?[] Parameters { get; } } \ No newline at end of file diff --git a/Framework/Foundation/Navigation/NavigateBack.cs b/Framework/Foundation/Navigation/NavigateBack.cs index f2d2efe..8fc4fbf 100644 --- a/Framework/Foundation/Navigation/NavigateBack.cs +++ b/Framework/Foundation/Navigation/NavigateBack.cs @@ -1,7 +1,5 @@ using Mediator; -namespace Toolkit.Foundation -{ - public record NavigateBack(object Route) : IRequest; +namespace Toolkit.Framework.Foundation; -} \ No newline at end of file +public record NavigateBack(object Route) : IRequest; \ No newline at end of file diff --git a/Framework/Foundation/Navigation/NavigationRoute.cs b/Framework/Foundation/Navigation/NavigationRoute.cs index 755940b..bae308c 100644 --- a/Framework/Foundation/Navigation/NavigationRoute.cs +++ b/Framework/Foundation/Navigation/NavigationRoute.cs @@ -1,6 +1,5 @@ using Mediator; -namespace Toolkit.Foundation -{ - public record NavigationRoute(string Name, object Route) : IRequest; -} \ No newline at end of file +namespace Toolkit.Framework.Foundation; + +public record NavigationRoute(string Name, object Route) : IRequest; \ No newline at end of file diff --git a/Framework/Foundation/Navigation/NavigationRouteDescriptor.cs b/Framework/Foundation/Navigation/NavigationRouteDescriptor.cs index 0bc64a7..87dbcf1 100644 --- a/Framework/Foundation/Navigation/NavigationRouteDescriptor.cs +++ b/Framework/Foundation/Navigation/NavigationRouteDescriptor.cs @@ -1,15 +1,14 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public record NavigationRouteDescriptor : INavigationRouteDescriptor { - public record NavigationRouteDescriptor : INavigationRouteDescriptor + public NavigationRouteDescriptor(string name, object route) { - public NavigationRouteDescriptor(string name, object route) - { - Name = name; - Route = route; - } - - public string Name { get; } - - public object Route { get; } + Name = name; + Route = route; } + + public string Name { get; } + + public object Route { get; } } \ No newline at end of file diff --git a/Framework/Foundation/Navigation/NavigationRouteDescriptorCollection.cs b/Framework/Foundation/Navigation/NavigationRouteDescriptorCollection.cs index 01eda79..28db78e 100644 --- a/Framework/Foundation/Navigation/NavigationRouteDescriptorCollection.cs +++ b/Framework/Foundation/Navigation/NavigationRouteDescriptorCollection.cs @@ -1,9 +1,8 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class NavigationRouteDescriptorCollection : List, INavigationRouteDescriptorCollection { - public class NavigationRouteDescriptorCollection : List, INavigationRouteDescriptorCollection + public NavigationRouteDescriptorCollection(IEnumerable collection) : base(collection) { - public NavigationRouteDescriptorCollection(IEnumerable collection) : base(collection) - { - } } } \ No newline at end of file diff --git a/Framework/Foundation/Services/IServiceCreator.cs b/Framework/Foundation/Services/IServiceCreator.cs index f987388..86d5ec8 100644 --- a/Framework/Foundation/Services/IServiceCreator.cs +++ b/Framework/Foundation/Services/IServiceCreator.cs @@ -1,7 +1,6 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface IServiceCreator { - public interface IServiceCreator - { - object Create(Func creator, params object[] parameters); - } -} + object Create(Func creator, params object[] parameters); +} \ No newline at end of file diff --git a/Framework/Foundation/Services/IServiceFactory.cs b/Framework/Foundation/Services/IServiceFactory.cs index 131c7d7..6b0ec62 100644 --- a/Framework/Foundation/Services/IServiceFactory.cs +++ b/Framework/Foundation/Services/IServiceFactory.cs @@ -1,9 +1,8 @@ -namespace Toolkit.Foundation -{ - public interface IServiceFactory - { - object? Create(Type type, params object?[] parameters); +namespace Toolkit.Framework.Foundation; - T? Create(Type type, params object?[] parameters); - } -} +public interface IServiceFactory +{ + object? Create(Type type, params object?[] parameters); + + T? Create(Type type, params object?[] parameters); +} \ No newline at end of file diff --git a/Framework/Foundation/Services/ServiceCreator.cs b/Framework/Foundation/Services/ServiceCreator.cs index 1546f1a..f4cc2d0 100644 --- a/Framework/Foundation/Services/ServiceCreator.cs +++ b/Framework/Foundation/Services/ServiceCreator.cs @@ -1,10 +1,9 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class ServiceCreator : IServiceCreator { - public class ServiceCreator : IServiceCreator + public virtual object Create(Func creator, params object[] parameters) { - public virtual object Create(Func creator, params object[] parameters) - { - return creator(typeof(T), parameters); - } + return creator(typeof(T), parameters); } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Services/ServiceFactory.cs b/Framework/Foundation/Services/ServiceFactory.cs index 523cd95..62c747d 100644 --- a/Framework/Foundation/Services/ServiceFactory.cs +++ b/Framework/Foundation/Services/ServiceFactory.cs @@ -1,26 +1,25 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class ServiceFactory : IServiceFactory { - public class ServiceFactory : IServiceFactory + private readonly Func factory; + private readonly Func creator; + + public ServiceFactory(Func factory, Func creator) { - private readonly Func factory; - private readonly Func creator; - - public ServiceFactory(Func factory, Func creator) - { - this.factory = factory; - this.creator = creator; - } - - public object? Create(Type type, params object?[] parameters) - { - 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) - { - dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type)); - return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters); - } + this.factory = factory; + this.creator = creator; } -} + + public object? Create(Type type, params object?[] parameters) + { + 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) + { + dynamic? lookup = factory(typeof(IServiceCreator<>).MakeGenericType(type)); + return lookup is not null ? (T)lookup.Create(creator, parameters) : (T)creator(type, parameters); + } +} \ No newline at end of file diff --git a/Framework/Foundation/Services/ServiceFactoryDescriptor.cs b/Framework/Foundation/Services/ServiceFactoryDescriptor.cs index ab2ea72..9f0ac58 100644 --- a/Framework/Foundation/Services/ServiceFactoryDescriptor.cs +++ b/Framework/Foundation/Services/ServiceFactoryDescriptor.cs @@ -1,25 +1,24 @@ using System.Reflection; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +internal class ServiceFactoryDescriptor { - internal class ServiceFactoryDescriptor + private readonly IServiceFactory serviceFactory; + + public ServiceFactoryDescriptor(IServiceFactory serviceFactory) { - private readonly IServiceFactory serviceFactory; - - public ServiceFactoryDescriptor(IServiceFactory serviceFactory) - { - this.serviceFactory = serviceFactory; - } - - public object? Create(Type type) - { - MethodInfo? methodInfo = typeof(ServiceFactoryDescriptor).GetMethod(nameof(Create), BindingFlags.NonPublic | BindingFlags.Instance); - return methodInfo?.MakeGenericMethod(type).Invoke(this, new object[] { type }); - } - - private T Create(Type type) - { - return serviceFactory.Create(type); - } + this.serviceFactory = serviceFactory; } -} + + public object? Create(Type type) + { + MethodInfo? methodInfo = typeof(ServiceFactoryDescriptor).GetMethod(nameof(Create), BindingFlags.NonPublic | BindingFlags.Instance); + return methodInfo?.MakeGenericMethod(type).Invoke(this, new object[] { type }); + } + + private T? Create(Type type) + { + return serviceFactory.Create(type); + } +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/INamedDataTemplateFactory.cs b/Framework/Foundation/Templates/INamedDataTemplateFactory.cs index a3a13b6..cc7ac89 100644 --- a/Framework/Foundation/Templates/INamedDataTemplateFactory.cs +++ b/Framework/Foundation/Templates/INamedDataTemplateFactory.cs @@ -1,7 +1,6 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface INamedDataTemplateFactory { - public interface INamedDataTemplateFactory - { - object? Create(string name, params object[] parameters); - } -} + object? Create(string name, params object[] parameters); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/INamedTemplateFactory.cs b/Framework/Foundation/Templates/INamedTemplateFactory.cs index 19d5308..7653e4e 100644 --- a/Framework/Foundation/Templates/INamedTemplateFactory.cs +++ b/Framework/Foundation/Templates/INamedTemplateFactory.cs @@ -1,7 +1,6 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface INamedTemplateFactory { - public interface INamedTemplateFactory - { - object? Create(string name); - } -} + object? Create(string name); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateBuilder.cs b/Framework/Foundation/Templates/ITemplateBuilder.cs index 3b44737..1208d2b 100644 --- a/Framework/Foundation/Templates/ITemplateBuilder.cs +++ b/Framework/Foundation/Templates/ITemplateBuilder.cs @@ -1,13 +1,12 @@ using Microsoft.Extensions.DependencyInjection; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface ITemplateBuilder { - public interface ITemplateBuilder - { - IReadOnlyCollection Descriptors { get; } + IReadOnlyCollection Descriptors { get; } - ITemplateBuilder Add(string name, ServiceLifetime lifetime = ServiceLifetime.Transient); + ITemplateBuilder Add(string name, ServiceLifetime lifetime = ServiceLifetime.Transient); - ITemplateBuilder Add(ServiceLifetime lifetime = ServiceLifetime.Transient); - } -} + ITemplateBuilder Add(ServiceLifetime lifetime = ServiceLifetime.Transient); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateDescriptor.cs b/Framework/Foundation/Templates/ITemplateDescriptor.cs index 0e501d6..d5b08db 100644 --- a/Framework/Foundation/Templates/ITemplateDescriptor.cs +++ b/Framework/Foundation/Templates/ITemplateDescriptor.cs @@ -1,15 +1,14 @@ using Microsoft.Extensions.DependencyInjection; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface ITemplateDescriptor { - public interface ITemplateDescriptor - { - Type ContentType { get; } + Type ContentType { get; } - ServiceLifetime Lifetime { get; } + ServiceLifetime Lifetime { get; } - string? Name { get; } + string? Name { get; } - Type TemplateType { get; } - } -} + Type TemplateType { get; } +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateDescriptorProvider.cs b/Framework/Foundation/Templates/ITemplateDescriptorProvider.cs index b369e06..7cfddbd 100644 --- a/Framework/Foundation/Templates/ITemplateDescriptorProvider.cs +++ b/Framework/Foundation/Templates/ITemplateDescriptorProvider.cs @@ -1,12 +1,10 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface ITemplateDescriptorProvider { + ITemplateDescriptor? Get(string name); - public interface ITemplateDescriptorProvider - { - ITemplateDescriptor? Get(string name); + ITemplateDescriptor? Get(Type type); - ITemplateDescriptor? Get(Type type); - - ITemplateDescriptor? Get(); - } -} + ITemplateDescriptor? Get(); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateFactory.cs b/Framework/Foundation/Templates/ITemplateFactory.cs index acace84..106c8f3 100644 --- a/Framework/Foundation/Templates/ITemplateFactory.cs +++ b/Framework/Foundation/Templates/ITemplateFactory.cs @@ -1,9 +1,8 @@ using System.Diagnostics.CodeAnalysis; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface ITemplateFactory { - public interface ITemplateFactory - { - object? Create([MaybeNull] object? data); - } -} + object? Create([MaybeNull] object? data); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateSelector.cs b/Framework/Foundation/Templates/ITemplateSelector.cs index 5fa83e4..5b0531a 100644 --- a/Framework/Foundation/Templates/ITemplateSelector.cs +++ b/Framework/Foundation/Templates/ITemplateSelector.cs @@ -1,6 +1,5 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface ITemplateSelector { - public interface ITemplateSelector - { - } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITypedDataTemplateFactory.cs b/Framework/Foundation/Templates/ITypedDataTemplateFactory.cs index 11a87f6..953caec 100644 --- a/Framework/Foundation/Templates/ITypedDataTemplateFactory.cs +++ b/Framework/Foundation/Templates/ITypedDataTemplateFactory.cs @@ -1,7 +1,6 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public interface ITypedDataTemplateFactory { - public interface ITypedDataTemplateFactory - { - object? Create(Type type, params object[] parameters); - } -} + object? Create(Type type, params object[] parameters); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/NamedDataTemplateFactory.cs b/Framework/Foundation/Templates/NamedDataTemplateFactory.cs index 7008fcc..64d664e 100644 --- a/Framework/Foundation/Templates/NamedDataTemplateFactory.cs +++ b/Framework/Foundation/Templates/NamedDataTemplateFactory.cs @@ -1,36 +1,35 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class NamedDataTemplateFactory : INamedDataTemplateFactory { - public class NamedDataTemplateFactory : INamedDataTemplateFactory + private readonly Dictionary cache = new(); + + private readonly IReadOnlyCollection descriptors; + private readonly IServiceFactory serviceFactory; + + public NamedDataTemplateFactory(IReadOnlyCollection descriptors, + IServiceFactory serviceFactory) { - private readonly Dictionary cache = new(); + this.descriptors = descriptors; + this.serviceFactory = serviceFactory; + } - private readonly IReadOnlyCollection descriptors; - private readonly IServiceFactory serviceFactory; - - public NamedDataTemplateFactory(IReadOnlyCollection descriptors, - IServiceFactory serviceFactory) + public virtual object? Create(string name, params object[] parameters) + { + if (cache.TryGetValue(name, out object? data)) { - this.descriptors = descriptors; - this.serviceFactory = serviceFactory; - } - - public virtual object? Create(string name, params object[] parameters) - { - if (cache.TryGetValue(name, out object? data)) - { - return data; - } - - if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor) - { - data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType); - if (data is ICache cache) - { - this.cache[name] = cache; - } - } - return data; } + + if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor) + { + data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType); + if (data is ICache cache) + { + this.cache[name] = cache; + } + } + + return data; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/NamedTemplateFactory.cs b/Framework/Foundation/Templates/NamedTemplateFactory.cs index 39f5c10..29b035e 100644 --- a/Framework/Foundation/Templates/NamedTemplateFactory.cs +++ b/Framework/Foundation/Templates/NamedTemplateFactory.cs @@ -1,41 +1,40 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class NamedTemplateFactory : INamedTemplateFactory { - public class NamedTemplateFactory : INamedTemplateFactory + private readonly Dictionary cache = new(); + + private readonly ITemplateDescriptorProvider provider; + private readonly IServiceFactory serviceFactory; + + public NamedTemplateFactory(ITemplateDescriptorProvider provider, + IServiceFactory serviceFactory) { - private readonly Dictionary cache = new(); + this.provider = provider; + this.serviceFactory = serviceFactory; + } - private readonly ITemplateDescriptorProvider provider; - private readonly IServiceFactory serviceFactory; - - public NamedTemplateFactory(ITemplateDescriptorProvider provider, - IServiceFactory serviceFactory) + public virtual object? Create(string name) + { + if (cache.TryGetValue(name, out object? view)) { - this.provider = provider; - this.serviceFactory = serviceFactory; - } - - public virtual object? Create(string name) - { - if (cache.TryGetValue(name, out object? view)) - { - return view; - } - - if (provider.Get(name) is ITemplateDescriptor descriptor) - { - view = serviceFactory.Create(descriptor.TemplateType); - if (view is ICache cache) - { - this.cache[name] = cache; - } - - if (descriptor.GetType().GenericTypeArguments is { Length: 2 }) - { - (descriptor as dynamic).ViewInvoker?.Invoke(view); - } - } - return view; } + + if (provider.Get(name) is ITemplateDescriptor descriptor) + { + view = serviceFactory.Create(descriptor.TemplateType); + if (view is ICache cache) + { + this.cache[name] = cache; + } + + if (descriptor.GetType().GenericTypeArguments is { Length: 2 }) + { + (descriptor as dynamic).ViewInvoker?.Invoke(view); + } + } + + return view; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TemplateBuilder.cs b/Framework/Foundation/Templates/TemplateBuilder.cs index d6a4c4a..c098248 100644 --- a/Framework/Foundation/Templates/TemplateBuilder.cs +++ b/Framework/Foundation/Templates/TemplateBuilder.cs @@ -1,24 +1,23 @@ using Microsoft.Extensions.DependencyInjection; using System.Collections.ObjectModel; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class TemplateBuilder : ITemplateBuilder { - public class TemplateBuilder : ITemplateBuilder + private readonly List descriptors = new(); + + public IReadOnlyCollection Descriptors => new ReadOnlyCollection(descriptors); + + public ITemplateBuilder Add(string name, ServiceLifetime lifetime = ServiceLifetime.Transient) { - private readonly List descriptors = new(); - - public IReadOnlyCollection Descriptors => new ReadOnlyCollection(descriptors); - - public ITemplateBuilder Add(string name, ServiceLifetime lifetime = ServiceLifetime.Transient) - { - descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), name, lifetime)); - return this; - } - - public ITemplateBuilder Add(ServiceLifetime lifetime = ServiceLifetime.Transient) - { - descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), null, lifetime)); - return this; - } + descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), name, lifetime)); + return this; } -} + + public ITemplateBuilder Add(ServiceLifetime lifetime = ServiceLifetime.Transient) + { + descriptors.Add(new TemplateDescriptor(typeof(TViewModel), typeof(TView), null, lifetime)); + return this; + } +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TemplateDescriptor.cs b/Framework/Foundation/Templates/TemplateDescriptor.cs index 442d179..bd86def 100644 --- a/Framework/Foundation/Templates/TemplateDescriptor.cs +++ b/Framework/Foundation/Templates/TemplateDescriptor.cs @@ -1,26 +1,25 @@ using Microsoft.Extensions.DependencyInjection; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class TemplateDescriptor : ITemplateDescriptor { - public class TemplateDescriptor : ITemplateDescriptor + public TemplateDescriptor(Type dataType, + Type templateType, + string? name = null, + ServiceLifetime lifetime = ServiceLifetime.Transient) { - public TemplateDescriptor(Type dataType, - Type templateType, - string? name = null, - ServiceLifetime lifetime = ServiceLifetime.Transient) - { - TemplateType = templateType; - ContentType = dataType; - Name = name; - Lifetime = lifetime; - } - - public ServiceLifetime Lifetime { get; } - - public Type TemplateType { get; } - - public Type ContentType { get; } - - public string? Name { get; } + TemplateType = templateType; + ContentType = dataType; + Name = name; + Lifetime = lifetime; } -} + + public ServiceLifetime Lifetime { get; } + + public Type TemplateType { get; } + + public Type ContentType { get; } + + public string? Name { get; } +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TemplateDescriptorProvider.cs b/Framework/Foundation/Templates/TemplateDescriptorProvider.cs index fab923d..1e4ad40 100644 --- a/Framework/Foundation/Templates/TemplateDescriptorProvider.cs +++ b/Framework/Foundation/Templates/TemplateDescriptorProvider.cs @@ -1,42 +1,41 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class TemplateDescriptorProvider : ITemplateDescriptorProvider { - public class TemplateDescriptorProvider : ITemplateDescriptorProvider + private readonly IReadOnlyCollection descriptors; + + public TemplateDescriptorProvider(IReadOnlyCollection descriptors) { - private readonly IReadOnlyCollection descriptors; - - public TemplateDescriptorProvider(IReadOnlyCollection descriptors) - { - this.descriptors = descriptors; - } - - public ITemplateDescriptor? Get(string name) - { - if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor) - { - return descriptor; - } - - return null; - } - - public ITemplateDescriptor? Get(Type type) - { - if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor) - { - return descriptor; - } - - return null; - } - - public ITemplateDescriptor? Get() - { - if (descriptors.FirstOrDefault(x => x.ContentType == typeof(T)) is ITemplateDescriptor descriptor) - { - return descriptor; - } - - return null; - } + this.descriptors = descriptors; } -} + + public ITemplateDescriptor? Get(string name) + { + if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor) + { + return descriptor; + } + + return null; + } + + public ITemplateDescriptor? Get(Type type) + { + if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor) + { + return descriptor; + } + + return null; + } + + public ITemplateDescriptor? Get() + { + if (descriptors.FirstOrDefault(x => x.ContentType == typeof(T)) is ITemplateDescriptor descriptor) + { + return descriptor; + } + + return null; + } +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TemplateFactory.cs b/Framework/Foundation/Templates/TemplateFactory.cs index 8c44252..e9df4e5 100644 --- a/Framework/Foundation/Templates/TemplateFactory.cs +++ b/Framework/Foundation/Templates/TemplateFactory.cs @@ -1,43 +1,42 @@ using System.Diagnostics.CodeAnalysis; -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class TemplateFactory : ITemplateFactory { - public class TemplateFactory : ITemplateFactory + private readonly Dictionary cache = new(); + + private readonly ITemplateDescriptorProvider provider; + private readonly IServiceFactory serviceFactory; + + public TemplateFactory(ITemplateDescriptorProvider provider, + IServiceFactory serviceFactory) { - private readonly Dictionary cache = new(); + this.provider = provider; + this.serviceFactory = serviceFactory; + } - private readonly ITemplateDescriptorProvider provider; - private readonly IServiceFactory serviceFactory; - - public TemplateFactory(ITemplateDescriptorProvider provider, - IServiceFactory serviceFactory) + public virtual object? Create([MaybeNull] object? data) + { + if (data is null) { - this.provider = provider; - this.serviceFactory = serviceFactory; + return null; } - public virtual object? Create([MaybeNull] object? data) + if (cache.TryGetValue(data, out object? template)) { - if (data is null) - { - return null; - } - - if (cache.TryGetValue(data, out object? template)) - { - return template; - } - - if (provider.Get(data.GetType()) is ITemplateDescriptor descriptor) - { - template = serviceFactory.Create(descriptor.TemplateType); - if (template is ICache cache) - { - this.cache[data] = cache; - } - } - return template; } + + if (provider.Get(data.GetType()) is ITemplateDescriptor descriptor) + { + template = serviceFactory.Create(descriptor.TemplateType); + if (template is ICache cache) + { + this.cache[data] = cache; + } + } + + return template; } -} +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TypedDataTemplateFactory.cs b/Framework/Foundation/Templates/TypedDataTemplateFactory.cs index c60359e..12f8fb7 100644 --- a/Framework/Foundation/Templates/TypedDataTemplateFactory.cs +++ b/Framework/Foundation/Templates/TypedDataTemplateFactory.cs @@ -1,36 +1,35 @@ -namespace Toolkit.Foundation +namespace Toolkit.Framework.Foundation; + +public class TypedDataTemplateFactory : ITypedDataTemplateFactory { - public class TypedDataTemplateFactory : ITypedDataTemplateFactory + private readonly Dictionary cache = new(); + + private readonly IReadOnlyCollection descriptors; + private readonly IServiceFactory serviceFactory; + + public TypedDataTemplateFactory(IReadOnlyCollection descriptors, + IServiceFactory serviceFactory) { - private readonly Dictionary cache = new(); + this.descriptors = descriptors; + this.serviceFactory = serviceFactory; + } - private readonly IReadOnlyCollection descriptors; - private readonly IServiceFactory serviceFactory; - - public TypedDataTemplateFactory(IReadOnlyCollection descriptors, - IServiceFactory serviceFactory) + public virtual object? Create(Type type, params object[] parameters) + { + if (cache.TryGetValue(type, out object? data)) { - this.descriptors = descriptors; - this.serviceFactory = serviceFactory; - } - - public virtual object? Create(Type type, params object[] parameters) - { - if (cache.TryGetValue(type, out object? data)) - { - return data; - } - - if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor) - { - data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType); - if (data is ICache cache) - { - this.cache[type] = cache; - } - } - return data; } + + if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor) + { + data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType); + if (data is ICache cache) + { + this.cache[type] = cache; + } + } + + return data; } -} +} \ No newline at end of file