diff --git a/Framework/Avalonia/Contents/ContentHandler.cs b/Framework/Avalonia/Contents/ContentHandler.cs new file mode 100644 index 0000000..cf144e4 --- /dev/null +++ b/Framework/Avalonia/Contents/ContentHandler.cs @@ -0,0 +1,51 @@ +using Avalonia; +using Mediator; +using System.Diagnostics; +using Toolkit.Framework.Foundation; + +namespace Toolkit.Framework.Avalonia; + +public class ContentHandler : IRequestHandler +{ + private readonly INamedContentTemplateFactory namedContentTemplateFactory; + private readonly INamedContentFactory namedContentFactory; + private readonly IContentTemplateFactory contentTemplateFactory; + private readonly ITypedContentFactory typedContentFactory; + + public ContentHandler(IContentTemplateFactory contentTemplateFactory, + INamedContentFactory namedContentFactory, + INamedContentTemplateFactory namedContentTemplateFactory, + ITypedContentFactory typedContentFactory) + { + this.contentTemplateFactory = contentTemplateFactory; + this.namedContentFactory = namedContentFactory; + this.namedContentTemplateFactory = namedContentTemplateFactory; + this.typedContentFactory = typedContentFactory; + } + + public ValueTask Handle(Content request, CancellationToken cancellationToken) + { + object? content = null; + object? template = null; + + if (request.Name is { Length: > 0 } name) + { + content = namedContentFactory.Create(name, request.Parameters); + template = namedContentTemplateFactory.Create(name); + } + + if (request.Type is Type type) + { + content = typedContentFactory.Create(type, request.Parameters); + template = contentTemplateFactory.Create(content); + } + + if (template is Visual visual) + { + visual.DataContext = content; + return new ValueTask(visual); + } + + return default; + } +} \ No newline at end of file diff --git a/Framework/Avalonia/Templates/TemplateSelector.cs b/Framework/Avalonia/Contents/ContentTemplateSelector.cs similarity index 75% rename from Framework/Avalonia/Templates/TemplateSelector.cs rename to Framework/Avalonia/Contents/ContentTemplateSelector.cs index 4b9c99c..f0c3dbc 100644 --- a/Framework/Avalonia/Templates/TemplateSelector.cs +++ b/Framework/Avalonia/Contents/ContentTemplateSelector.cs @@ -1,17 +1,16 @@ using Avalonia.Controls; using Avalonia.Controls.Templates; -using System.Diagnostics; using Toolkit.Framework.Foundation; namespace Toolkit.Framework.Avalonia; -public class TemplateSelector : IDataTemplate, ITemplateSelector +public class ContentTemplateSelector : IDataTemplate, IContentTemplateSelector { private readonly Dictionary dataTracking = new(); - private readonly ITemplateFactory templateFactory; + private readonly IContentTemplateFactory templateFactory; - public TemplateSelector(ITemplateFactory templateFactory) + public ContentTemplateSelector(IContentTemplateFactory templateFactory) { this.templateFactory = templateFactory; } diff --git a/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs b/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs index a3093ee..32c8c83 100644 --- a/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs +++ b/Framework/Avalonia/Extensions/IHostBuilderExtensions.cs @@ -7,22 +7,22 @@ namespace Toolkit.Framework.Avalonia; public static class IHostBuilderExtensions { - public static IHostBuilder ConfigureTemplates(this IHostBuilder hostBuilder, Action builderDelegate) + public static IHostBuilder ConfigureTemplates(this IHostBuilder hostBuilder, Action builderDelegate) { hostBuilder.ConfigureServices((hostBuilderContext, serviceCollection) => { - TemplateBuilder? builder = new(); + ContentTemplateBuilder? builder = new(); builderDelegate?.Invoke(builder); serviceCollection.TryAddSingleton(builder.Descriptors); - serviceCollection.TryAddSingleton(); - serviceCollection.TryAddSingleton(); - serviceCollection.TryAddSingleton(); - serviceCollection.TryAddSingleton(); - serviceCollection.TryAddSingleton(); - serviceCollection.TryAddSingleton(); + serviceCollection.TryAddSingleton(); + serviceCollection.TryAddSingleton(); + serviceCollection.TryAddSingleton(); + serviceCollection.TryAddSingleton(); + serviceCollection.TryAddSingleton(); + serviceCollection.TryAddSingleton(); - foreach (ITemplateDescriptor? descriptor in builder.Descriptors) + foreach (IContentTemplateDescriptor? descriptor in builder.Descriptors) { serviceCollection.Add(new ServiceDescriptor(descriptor.TemplateType, descriptor.TemplateType, descriptor.Lifetime)); serviceCollection.Add(new ServiceDescriptor(descriptor.ContentType, descriptor.ContentType, descriptor.Lifetime)); diff --git a/Framework/Avalonia/Markups/ContentExtension.cs b/Framework/Avalonia/Markups/ContentExtension.cs new file mode 100644 index 0000000..ff8cbd8 --- /dev/null +++ b/Framework/Avalonia/Markups/ContentExtension.cs @@ -0,0 +1,491 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Data; +using Avalonia.Interactivity; +using Avalonia.Markup.Xaml; +using Mediator; +using System.Diagnostics; +using Toolkit.Framework.Foundation; + +namespace Toolkit.Framework.Avalonia; + +public class ContentExtension : MarkupExtension +{ + private static readonly AttachedProperty MediatorProperty = + AvaloniaProperty.RegisterAttached("Mediator"); + + private static readonly AttachedProperty ParameterProperty = + AvaloniaProperty.RegisterAttached("Parameter"); + + private static readonly AvaloniaProperty ToProperty = + AvaloniaProperty.RegisterAttached("To"); + + private readonly Binding? mediatorBinding; + private readonly List parameters = new(); + private readonly Binding? toBinding; + + public ContentExtension(object mediator, + object to) + { + mediatorBinding = mediator.ToBinding(); + this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); + } + + public ContentExtension(object mediator, + object to, + object args1) + { + mediatorBinding = mediator.ToBinding(); + this.toBinding = to is Binding toBinding ? toBinding : to.ToBinding(); + + parameters.Add(args1 is MarkupExtension ? args1 : args1.ToBinding()); + } + + public ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 ContentExtension(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 override object? ProvideValue(IServiceProvider serviceProvider) + { + if (serviceProvider.GetService(typeof(IProvideValueTarget)) is IProvideValueTarget target) + { + AvaloniaObject? targetObject = null; + 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 && toBinding is not null && mediatorBinding is not null) + { + if (target.TargetProperty is StyledProperty targetProperty) + { + if (targetObject is Control control) + { + void SetContent() + { + targetObject.Bind(MediatorProperty, mediatorBinding); + if (targetObject.GetValue(MediatorProperty) is IMediator mediator) + { + targetObject.Bind(ToProperty, toBinding); + if (targetObject.GetValue(ToProperty) is { } to) + { + List? parameters = new(); + foreach (object? parameter in this.parameters) + { + if (parameter is not null) + { + switch (parameter) + { + case IParameter keyedParameter: + if (keyedParameter.GetValue(targetObject) is KeyValuePair keyValuePair) + { + parameters.Add(keyValuePair); + } + break; + + default: + if (parameter.ToBinding() is Binding defaultDinding) + { + targetObject.Bind(ParameterProperty, defaultDinding); + parameters.Add((dynamic)targetObject.GetValue(ParameterProperty)); + } + break; + } + } + } + + if (to is string name) + { + Trace.WriteLine(name); + + ValueTask namedTask = mediator.Send(new Content(name, parameters.ToArray())); + if (namedTask is ValueTask { Result: object result }) + { + control.SetValue(targetProperty, result); + } + } + + if (to is Type type) + { + ValueTask typedTask = mediator.Send(new Content(type, parameters.ToArray())); + if (typedTask is ValueTask { Result: object result }) + { + control.SetValue(targetProperty, result); + } + } + } + } + } + + if (!control.IsLoaded) + { + void HandleLoaded(object? sender, RoutedEventArgs args) + { + control.Loaded -= HandleLoaded; + SetContent(); + } + + control.Loaded += HandleLoaded; + } + else + { + SetContent(); + } + } + } + } + } + + return default; + } +} diff --git a/Framework/Avalonia/Markups/NavigateExtension.cs b/Framework/Avalonia/Markups/NavigateExtension.cs index dd1806a..dd99cf4 100644 --- a/Framework/Avalonia/Markups/NavigateExtension.cs +++ b/Framework/Avalonia/Markups/NavigateExtension.cs @@ -6,7 +6,6 @@ using Mediator; using Toolkit.Framework.Foundation; namespace Toolkit.Framework.Avalonia; - public class NavigateExtension : TriggerExtension { private static readonly AttachedProperty MediatorProperty = @@ -412,74 +411,71 @@ public class NavigateExtension : TriggerExtension protected override void OnInvoked(object sender, EventArgs args) { - if (TargetObject is not null) + if (TargetObject is not null && 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 IParameter keyedParameter: + if (keyedParameter.GetValue(TargetObject) is KeyValuePair keyValuePair) + { + parameters.Add(keyValuePair); + } + break; - case IEventParameter eventParameter: - parameters.AddRange(eventParameter.GetValues(args)); - 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; - } + 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) + 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) { - TargetObject.Bind(RouteProperty, routeBinding); - route = TargetObject.GetValue(RouteProperty); + name = string.Format(format, name); } - 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 }); + } - mediator.Send(new Navigate(name, parameters.ToArray()) { Route = route }); - } - - if (to is Type type) - { - mediator.Send(new Navigate(type, 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); } } } \ No newline at end of file diff --git a/Framework/Avalonia/Markups/NavigationRouteExtension.cs b/Framework/Avalonia/Markups/NavigationRouteExtension.cs index 9474085..efe02db 100644 --- a/Framework/Avalonia/Markups/NavigationRouteExtension.cs +++ b/Framework/Avalonia/Markups/NavigationRouteExtension.cs @@ -37,39 +37,35 @@ public class NavigationRouteExtension : MarkupExtension { if (!TryGetBinding(control, out object? binding)) { - void HandleDataContextChanged(object? sender, EventArgs args) + void AddRoute(TemplatedControl control) { - if (TryGetBinding(control, out binding)) + if (mediatorBinding is not null) { - control.Loaded -= HandleLoaded; - 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.DataContextChanged += HandleDataContextChanged; + void HandleDataContextChanged(object? sender, EventArgs args) + { + control.Loaded -= HandleLoaded; + if (TryGetBinding(control, out binding)) + { + AddRoute(control); + } + } + control.DataContextChanged += HandleDataContextChanged; void HandleLoaded(object? sender, RoutedEventArgs args) { control.Loaded -= HandleLoaded; if (TryGetBinding(control, out binding)) { - 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); - } - } + AddRoute(control); } } diff --git a/Framework/Avalonia/Markups/TriggerExtension.cs b/Framework/Avalonia/Markups/TriggerExtension.cs index 50ba927..7474e2b 100644 --- a/Framework/Avalonia/Markups/TriggerExtension.cs +++ b/Framework/Avalonia/Markups/TriggerExtension.cs @@ -31,7 +31,6 @@ public class TriggerExtension : MarkupExtension if (TargetObject is not null) { string? targetName = target.TargetProperty as string; - TargetInvoke = target.TargetProperty; OnAttached(serviceProvider); @@ -59,7 +58,7 @@ public class TriggerExtension : MarkupExtension } } - return null; + return default; } protected virtual void OnAttached(IServiceProvider serviceProvider) diff --git a/Framework/Avalonia/Navigation/NavigateHandler.cs b/Framework/Avalonia/Navigation/NavigateHandler.cs index c41bf66..35bd255 100644 --- a/Framework/Avalonia/Navigation/NavigateHandler.cs +++ b/Framework/Avalonia/Navigation/NavigateHandler.cs @@ -9,23 +9,23 @@ 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; + private readonly INamedContentTemplateFactory namedContentTemplateFactory; + private readonly INamedContentFactory namedContentFactory; + private readonly IContentTemplateFactory contentTemplateFactory; + private readonly ITypedContentFactory typedContentFactory; public NavigateHandler(IMediator mediator, - ITemplateFactory templateFactory, - INamedTemplateFactory namedTemplateFactory, - INamedDataTemplateFactory namedDataTemplateFactory, - ITypedDataTemplateFactory typedDataTemplateFactory, + IContentTemplateFactory contentTemplateFactory, + INamedContentFactory namedContentFactory, + INamedContentTemplateFactory namedContentTemplateFactory, + ITypedContentFactory typedContentFactory, INavigationRouteDescriptorCollection descriptors) { this.mediator = mediator; - this.templateFactory = templateFactory; - this.namedTemplateFactory = namedTemplateFactory; - this.namedDataTemplateFactory = namedDataTemplateFactory; - this.typedDataTemplateFactory = typedDataTemplateFactory; + this.contentTemplateFactory = contentTemplateFactory; + this.namedContentFactory = namedContentFactory; + this.namedContentTemplateFactory = namedContentTemplateFactory; + this.typedContentFactory = typedContentFactory; this.descriptors = descriptors; } @@ -54,14 +54,14 @@ public class NavigateHandler : IRequestHandler if (request.Name is { Length: > 0 } name) { - content = namedDataTemplateFactory.Create(name, parameters.ToArray()); - template = namedTemplateFactory.Create(name); + content = namedContentFactory.Create(name, parameters.ToArray()); + template = namedContentTemplateFactory.Create(name); } if (request.Type is Type type) { - content = typedDataTemplateFactory.Create(type, parameters.ToArray()); - template = templateFactory.Create(content); + content = typedContentFactory.Create(type, parameters.ToArray()); + template = contentTemplateFactory.Create(content); } if (template is not null) diff --git a/Framework/Foundation/Contents/Content.cs b/Framework/Foundation/Contents/Content.cs new file mode 100644 index 0000000..77b4033 --- /dev/null +++ b/Framework/Foundation/Contents/Content.cs @@ -0,0 +1,24 @@ +using Mediator; + +namespace Toolkit.Framework.Foundation; + +public record Content : IRequest +{ + public Content(string name, params object?[] parameters) + { + Name = name; + Parameters = parameters; + } + + public Content(Type type, params object?[] parameters) + { + Type = type; + Parameters = parameters; + } + + public Type? Type { get; } + + public string? Name { get; } + + public object?[] Parameters { get; } +} \ No newline at end of file diff --git a/Framework/Foundation/Contents/ContentTemplateBuilder.cs b/Framework/Foundation/Contents/ContentTemplateBuilder.cs new file mode 100644 index 0000000..9da3357 --- /dev/null +++ b/Framework/Foundation/Contents/ContentTemplateBuilder.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; +using System.Collections.ObjectModel; + +namespace Toolkit.Framework.Foundation; + +public class ContentTemplateBuilder : IContentTemplateBuilder +{ + private readonly List descriptors = new(); + + public IReadOnlyCollection Descriptors => new ReadOnlyCollection(descriptors); + + public IContentTemplateBuilder Add(string name, ServiceLifetime lifetime = ServiceLifetime.Transient) + { + descriptors.Add(new ContentTemplateDescriptor(typeof(TViewModel), typeof(TView), name, lifetime)); + return this; + } + + public IContentTemplateBuilder Add(ServiceLifetime lifetime = ServiceLifetime.Transient) + { + descriptors.Add(new ContentTemplateDescriptor(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/Contents/ContentTemplateDescriptor.cs similarity index 80% rename from Framework/Foundation/Templates/TemplateDescriptor.cs rename to Framework/Foundation/Contents/ContentTemplateDescriptor.cs index bd86def..2193d40 100644 --- a/Framework/Foundation/Templates/TemplateDescriptor.cs +++ b/Framework/Foundation/Contents/ContentTemplateDescriptor.cs @@ -2,9 +2,9 @@ namespace Toolkit.Framework.Foundation; -public class TemplateDescriptor : ITemplateDescriptor +public class ContentTemplateDescriptor : IContentTemplateDescriptor { - public TemplateDescriptor(Type dataType, + public ContentTemplateDescriptor(Type dataType, Type templateType, string? name = null, ServiceLifetime lifetime = ServiceLifetime.Transient) diff --git a/Framework/Foundation/Contents/ContentTemplateDescriptorProvider.cs b/Framework/Foundation/Contents/ContentTemplateDescriptorProvider.cs new file mode 100644 index 0000000..1712d3e --- /dev/null +++ b/Framework/Foundation/Contents/ContentTemplateDescriptorProvider.cs @@ -0,0 +1,41 @@ +namespace Toolkit.Framework.Foundation; + +public class ContentTemplateDescriptorProvider : IContentTemplateDescriptorProvider +{ + private readonly IReadOnlyCollection descriptors; + + public ContentTemplateDescriptorProvider(IReadOnlyCollection descriptors) + { + this.descriptors = descriptors; + } + + public IContentTemplateDescriptor? Get(string name) + { + if (descriptors.FirstOrDefault(x => x.Name == name) is IContentTemplateDescriptor descriptor) + { + return descriptor; + } + + return null; + } + + public IContentTemplateDescriptor? Get(Type type) + { + if (descriptors.FirstOrDefault(x => x.ContentType == type) is IContentTemplateDescriptor descriptor) + { + return descriptor; + } + + return null; + } + + public IContentTemplateDescriptor? Get() + { + if (descriptors.FirstOrDefault(x => x.ContentType == typeof(T)) is IContentTemplateDescriptor descriptor) + { + return descriptor; + } + + return null; + } +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TemplateFactory.cs b/Framework/Foundation/Contents/ContentTemplateFactory.cs similarity index 73% rename from Framework/Foundation/Templates/TemplateFactory.cs rename to Framework/Foundation/Contents/ContentTemplateFactory.cs index e9df4e5..3ac1beb 100644 --- a/Framework/Foundation/Templates/TemplateFactory.cs +++ b/Framework/Foundation/Contents/ContentTemplateFactory.cs @@ -2,14 +2,14 @@ namespace Toolkit.Framework.Foundation; -public class TemplateFactory : ITemplateFactory +public class ContentTemplateFactory : IContentTemplateFactory { private readonly Dictionary cache = new(); - private readonly ITemplateDescriptorProvider provider; + private readonly IContentTemplateDescriptorProvider provider; private readonly IServiceFactory serviceFactory; - public TemplateFactory(ITemplateDescriptorProvider provider, + public ContentTemplateFactory(IContentTemplateDescriptorProvider provider, IServiceFactory serviceFactory) { this.provider = provider; @@ -28,7 +28,7 @@ public class TemplateFactory : ITemplateFactory return template; } - if (provider.Get(data.GetType()) is ITemplateDescriptor descriptor) + if (provider.Get(data.GetType()) is IContentTemplateDescriptor descriptor) { template = serviceFactory.Create(descriptor.TemplateType); if (template is ICache cache) diff --git a/Framework/Foundation/Contents/IContentTemplateBuilder.cs b/Framework/Foundation/Contents/IContentTemplateBuilder.cs new file mode 100644 index 0000000..0d91dbf --- /dev/null +++ b/Framework/Foundation/Contents/IContentTemplateBuilder.cs @@ -0,0 +1,12 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace Toolkit.Framework.Foundation; + +public interface IContentTemplateBuilder +{ + IReadOnlyCollection Descriptors { get; } + + IContentTemplateBuilder Add(string name, ServiceLifetime lifetime = ServiceLifetime.Transient); + + IContentTemplateBuilder Add(ServiceLifetime lifetime = ServiceLifetime.Transient); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateDescriptor.cs b/Framework/Foundation/Contents/IContentTemplateDescriptor.cs similarity index 83% rename from Framework/Foundation/Templates/ITemplateDescriptor.cs rename to Framework/Foundation/Contents/IContentTemplateDescriptor.cs index d5b08db..5838ea8 100644 --- a/Framework/Foundation/Templates/ITemplateDescriptor.cs +++ b/Framework/Foundation/Contents/IContentTemplateDescriptor.cs @@ -2,7 +2,7 @@ namespace Toolkit.Framework.Foundation; -public interface ITemplateDescriptor +public interface IContentTemplateDescriptor { Type ContentType { get; } diff --git a/Framework/Foundation/Contents/IContentTemplateDescriptorProvider.cs b/Framework/Foundation/Contents/IContentTemplateDescriptorProvider.cs new file mode 100644 index 0000000..17e882c --- /dev/null +++ b/Framework/Foundation/Contents/IContentTemplateDescriptorProvider.cs @@ -0,0 +1,10 @@ +namespace Toolkit.Framework.Foundation; + +public interface IContentTemplateDescriptorProvider +{ + IContentTemplateDescriptor? Get(string name); + + IContentTemplateDescriptor? Get(Type type); + + IContentTemplateDescriptor? Get(); +} \ No newline at end of file diff --git a/Framework/Foundation/Contents/IContentTemplateFactory.cs b/Framework/Foundation/Contents/IContentTemplateFactory.cs new file mode 100644 index 0000000..3d45a87 --- /dev/null +++ b/Framework/Foundation/Contents/IContentTemplateFactory.cs @@ -0,0 +1,8 @@ +using System.Diagnostics.CodeAnalysis; + +namespace Toolkit.Framework.Foundation; + +public interface IContentTemplateFactory +{ + object? Create([MaybeNull] object? content); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateSelector.cs b/Framework/Foundation/Contents/IContentTemplateSelector.cs similarity index 52% rename from Framework/Foundation/Templates/ITemplateSelector.cs rename to Framework/Foundation/Contents/IContentTemplateSelector.cs index 5b0531a..72c73b5 100644 --- a/Framework/Foundation/Templates/ITemplateSelector.cs +++ b/Framework/Foundation/Contents/IContentTemplateSelector.cs @@ -1,5 +1,5 @@ namespace Toolkit.Framework.Foundation; -public interface ITemplateSelector +public interface IContentTemplateSelector { } \ No newline at end of file diff --git a/Framework/Foundation/Templates/INamedTemplateFactory.cs b/Framework/Foundation/Contents/INamedContentFactory.cs similarity index 63% rename from Framework/Foundation/Templates/INamedTemplateFactory.cs rename to Framework/Foundation/Contents/INamedContentFactory.cs index 7653e4e..a272818 100644 --- a/Framework/Foundation/Templates/INamedTemplateFactory.cs +++ b/Framework/Foundation/Contents/INamedContentFactory.cs @@ -1,6 +1,6 @@ namespace Toolkit.Framework.Foundation; -public interface INamedTemplateFactory +public interface INamedContentTemplateFactory { object? Create(string name); } \ No newline at end of file diff --git a/Framework/Foundation/Contents/INamedContentTemplateFactory.cs b/Framework/Foundation/Contents/INamedContentTemplateFactory.cs new file mode 100644 index 0000000..26edeb2 --- /dev/null +++ b/Framework/Foundation/Contents/INamedContentTemplateFactory.cs @@ -0,0 +1,6 @@ +namespace Toolkit.Framework.Foundation; + +public interface INamedContentFactory +{ + object? Create(string name, params object?[] parameters); +} \ No newline at end of file diff --git a/Framework/Foundation/Contents/ITypedContentFactory.cs b/Framework/Foundation/Contents/ITypedContentFactory.cs new file mode 100644 index 0000000..6e791db --- /dev/null +++ b/Framework/Foundation/Contents/ITypedContentFactory.cs @@ -0,0 +1,6 @@ +namespace Toolkit.Framework.Foundation; + +public interface ITypedContentFactory +{ + object? Create(Type type, params object?[] parameters); +} \ No newline at end of file diff --git a/Framework/Foundation/Templates/NamedDataTemplateFactory.cs b/Framework/Foundation/Contents/NamedContentFactory.cs similarity index 76% rename from Framework/Foundation/Templates/NamedDataTemplateFactory.cs rename to Framework/Foundation/Contents/NamedContentFactory.cs index 64d664e..b7c439c 100644 --- a/Framework/Foundation/Templates/NamedDataTemplateFactory.cs +++ b/Framework/Foundation/Contents/NamedContentFactory.cs @@ -1,13 +1,13 @@ namespace Toolkit.Framework.Foundation; -public class NamedDataTemplateFactory : INamedDataTemplateFactory +public class NamedContentFactory : INamedContentFactory { private readonly Dictionary cache = new(); - private readonly IReadOnlyCollection descriptors; + private readonly IReadOnlyCollection descriptors; private readonly IServiceFactory serviceFactory; - public NamedDataTemplateFactory(IReadOnlyCollection descriptors, + public NamedContentFactory(IReadOnlyCollection descriptors, IServiceFactory serviceFactory) { this.descriptors = descriptors; @@ -21,7 +21,7 @@ public class NamedDataTemplateFactory : INamedDataTemplateFactory return data; } - if (descriptors.FirstOrDefault(x => x.Name == name) is ITemplateDescriptor descriptor) + if (descriptors.FirstOrDefault(x => x.Name == name) is IContentTemplateDescriptor descriptor) { data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType); if (data is ICache cache) diff --git a/Framework/Foundation/Templates/NamedTemplateFactory.cs b/Framework/Foundation/Contents/NamedContentTemplateFactory.cs similarity index 74% rename from Framework/Foundation/Templates/NamedTemplateFactory.cs rename to Framework/Foundation/Contents/NamedContentTemplateFactory.cs index 29b035e..d7af3c2 100644 --- a/Framework/Foundation/Templates/NamedTemplateFactory.cs +++ b/Framework/Foundation/Contents/NamedContentTemplateFactory.cs @@ -1,13 +1,13 @@ namespace Toolkit.Framework.Foundation; -public class NamedTemplateFactory : INamedTemplateFactory +public class NamedContentTemplateFactory : INamedContentTemplateFactory { private readonly Dictionary cache = new(); - private readonly ITemplateDescriptorProvider provider; + private readonly IContentTemplateDescriptorProvider provider; private readonly IServiceFactory serviceFactory; - public NamedTemplateFactory(ITemplateDescriptorProvider provider, + public NamedContentTemplateFactory(IContentTemplateDescriptorProvider provider, IServiceFactory serviceFactory) { this.provider = provider; @@ -21,7 +21,7 @@ public class NamedTemplateFactory : INamedTemplateFactory return view; } - if (provider.Get(name) is ITemplateDescriptor descriptor) + if (provider.Get(name) is IContentTemplateDescriptor descriptor) { view = serviceFactory.Create(descriptor.TemplateType); if (view is ICache cache) diff --git a/Framework/Foundation/Templates/TypedDataTemplateFactory.cs b/Framework/Foundation/Contents/TypedContentFactory.cs similarity index 75% rename from Framework/Foundation/Templates/TypedDataTemplateFactory.cs rename to Framework/Foundation/Contents/TypedContentFactory.cs index 12f8fb7..fe2c07f 100644 --- a/Framework/Foundation/Templates/TypedDataTemplateFactory.cs +++ b/Framework/Foundation/Contents/TypedContentFactory.cs @@ -1,13 +1,13 @@ namespace Toolkit.Framework.Foundation; -public class TypedDataTemplateFactory : ITypedDataTemplateFactory +public class TypedContentFactory : ITypedContentFactory { private readonly Dictionary cache = new(); - private readonly IReadOnlyCollection descriptors; + private readonly IReadOnlyCollection descriptors; private readonly IServiceFactory serviceFactory; - public TypedDataTemplateFactory(IReadOnlyCollection descriptors, + public TypedContentFactory(IReadOnlyCollection descriptors, IServiceFactory serviceFactory) { this.descriptors = descriptors; @@ -21,7 +21,7 @@ public class TypedDataTemplateFactory : ITypedDataTemplateFactory return data; } - if (descriptors.FirstOrDefault(x => x.ContentType == type) is ITemplateDescriptor descriptor) + if (descriptors.FirstOrDefault(x => x.ContentType == type) is IContentTemplateDescriptor descriptor) { data = parameters is { Length: > 0 } ? serviceFactory.Create(descriptor.ContentType, parameters) : serviceFactory.Create(descriptor.ContentType); if (data is ICache cache) diff --git a/Framework/Foundation/Navigation/Navigate.cs b/Framework/Foundation/Navigation/Navigate.cs index 35005f3..c60ae33 100644 --- a/Framework/Foundation/Navigation/Navigate.cs +++ b/Framework/Foundation/Navigation/Navigate.cs @@ -22,7 +22,5 @@ public record Navigate : IRequest public string? Name { get; } - public string? FriendlyName { get; init; } - public object?[] Parameters { get; } } \ No newline at end of file diff --git a/Framework/Foundation/Templates/INamedDataTemplateFactory.cs b/Framework/Foundation/Templates/INamedDataTemplateFactory.cs deleted file mode 100644 index cc7ac89..0000000 --- a/Framework/Foundation/Templates/INamedDataTemplateFactory.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Toolkit.Framework.Foundation; - -public interface INamedDataTemplateFactory -{ - object? Create(string name, params object[] parameters); -} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateBuilder.cs b/Framework/Foundation/Templates/ITemplateBuilder.cs deleted file mode 100644 index 1208d2b..0000000 --- a/Framework/Foundation/Templates/ITemplateBuilder.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Toolkit.Framework.Foundation; - -public interface ITemplateBuilder -{ - IReadOnlyCollection Descriptors { get; } - - ITemplateBuilder Add(string name, ServiceLifetime lifetime = ServiceLifetime.Transient); - - ITemplateBuilder Add(ServiceLifetime lifetime = ServiceLifetime.Transient); -} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateDescriptorProvider.cs b/Framework/Foundation/Templates/ITemplateDescriptorProvider.cs deleted file mode 100644 index 7cfddbd..0000000 --- a/Framework/Foundation/Templates/ITemplateDescriptorProvider.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace Toolkit.Framework.Foundation; - -public interface ITemplateDescriptorProvider -{ - ITemplateDescriptor? Get(string name); - - ITemplateDescriptor? Get(Type type); - - ITemplateDescriptor? Get(); -} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITemplateFactory.cs b/Framework/Foundation/Templates/ITemplateFactory.cs deleted file mode 100644 index 106c8f3..0000000 --- a/Framework/Foundation/Templates/ITemplateFactory.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Diagnostics.CodeAnalysis; - -namespace Toolkit.Framework.Foundation; - -public interface ITemplateFactory -{ - object? Create([MaybeNull] object? data); -} \ No newline at end of file diff --git a/Framework/Foundation/Templates/ITypedDataTemplateFactory.cs b/Framework/Foundation/Templates/ITypedDataTemplateFactory.cs deleted file mode 100644 index 953caec..0000000 --- a/Framework/Foundation/Templates/ITypedDataTemplateFactory.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Toolkit.Framework.Foundation; - -public interface ITypedDataTemplateFactory -{ - object? Create(Type type, params object[] parameters); -} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TemplateBuilder.cs b/Framework/Foundation/Templates/TemplateBuilder.cs deleted file mode 100644 index c098248..0000000 --- a/Framework/Foundation/Templates/TemplateBuilder.cs +++ /dev/null @@ -1,23 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using System.Collections.ObjectModel; - -namespace Toolkit.Framework.Foundation; - -public class TemplateBuilder : ITemplateBuilder -{ - 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; - } -} \ No newline at end of file diff --git a/Framework/Foundation/Templates/TemplateDescriptorProvider.cs b/Framework/Foundation/Templates/TemplateDescriptorProvider.cs deleted file mode 100644 index 1e4ad40..0000000 --- a/Framework/Foundation/Templates/TemplateDescriptorProvider.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace Toolkit.Framework.Foundation; - -public class TemplateDescriptorProvider : ITemplateDescriptorProvider -{ - 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; - } -} \ No newline at end of file