diff --git a/Toolkit.Avalonia/IServiceCollectionExtensions.cs b/Toolkit.Avalonia/IServiceCollectionExtensions.cs index df36924..f593f84 100644 --- a/Toolkit.Avalonia/IServiceCollectionExtensions.cs +++ b/Toolkit.Avalonia/IServiceCollectionExtensions.cs @@ -9,119 +9,6 @@ namespace Toolkit.Avalonia; public static class IServiceCollectionExtensions { - public static IServiceCollection AddConfigurationTemplate(this IServiceCollection services, - params object[]? parameters) - where TConfiguration : class - where THeader : class - where TDescription : class - where TAction : class - { - Type viewModelType = typeof(ComponentConfigurationViewModel); - Type viewType = typeof(Button); - - object key = viewModelType.Name.Replace("ViewModel", ""); - - services.AddTransient>(provider => - provider.GetRequiredService() - .Create>(parameters)!); - - services.TryAddTransient(viewType); - - services.AddKeyedTransient>(key, (provider, key) => - provider.GetRequiredService() - .Create>(parameters)!); - - services.TryAddKeyedTransient(viewType, key); - - services.AddTransient(provider => - new ContentTemplateDescriptor(key, viewModelType, viewType, parameters)); - - services.TryAddTransient(); - services.TryAddTransient(); - services.TryAddTransient(); - - return services; - } - - public static IServiceCollection AddConfigurationTemplate(this IServiceCollection services, - Func valueDelegate, - object header, - object description, - params object[]? parameters) - where TConfiguration : class - where TAction : class - { - Type viewModelType = typeof(ComponentConfigurationViewModel); - Type viewType = typeof(Button); - - object key = viewModelType.Name.Replace("ViewModel", ""); - - parameters = [valueDelegate, header, description, .. parameters ?? Enumerable.Empty()]; - - services.AddTransient>(provider => - provider.GetRequiredService() - .Create>(parameters)!); - - services.TryAddTransient(viewType); - - services.AddKeyedTransient>(key, (provider, key) => - provider.GetRequiredService() - .Create>(parameters)!); - - services.TryAddKeyedTransient(viewType, key); - - services.AddTransient(provider => - new ContentTemplateDescriptor(key, viewModelType, viewType, parameters)); - - services.TryAddTransient(); - - return services; - } - - public static IServiceCollection AddConfigurationTemplate(this IServiceCollection services, - Func valueDelegate, - object description, - params object[]? parameters) - where TConfiguration : class - where TDescription : class - where TAction : class - { - Type viewModelType = typeof(ComponentConfigurationViewModel); - Type viewType = typeof(Button); - - object key = viewModelType.Name.Replace("ViewModel", ""); - - parameters = [valueDelegate, description, .. parameters ?? Enumerable.Empty()]; - - services.AddTransient>(provider => - provider.GetRequiredService() - .Create>(parameters)!); - - services.TryAddTransient(viewType); - - services.AddKeyedTransient>(key, (provider, key) => - provider.GetRequiredService() - .Create>(parameters)!); - - services.TryAddKeyedTransient(viewType, key); - - services.AddTransient(provider => - new ContentTemplateDescriptor(key, viewModelType, viewType, parameters)); - - services.TryAddTransient(); - services.TryAddTransient(); - - return services; - } - public static IServiceCollection AddAvalonia(this IServiceCollection services) { services.AddTransient(); diff --git a/Toolkit.Foundation/ComponentConfigurationViewModel.cs b/Toolkit.Foundation/ComponentConfigurationViewModel.cs deleted file mode 100644 index 3bfe51e..0000000 --- a/Toolkit.Foundation/ComponentConfigurationViewModel.cs +++ /dev/null @@ -1,105 +0,0 @@ -using CommunityToolkit.Mvvm.ComponentModel; - -namespace Toolkit.Foundation; - -public partial class ComponentConfigurationViewModel : - ValueViewModel, - IComponentConfigurationViewModel - where TConfiguration : class -{ - public ComponentConfigurationViewModel(IServiceProvider provider, - IServiceFactory factory, - IMediator mediator, - IPublisher publisher, - ISubscriber subscriber, - IDisposer disposer, - THeader header, - TDescription description, - TAction action) : base(provider, factory, mediator, publisher, subscriber, disposer) - { - } -} - -public partial class ComponentConfigurationViewModel(IServiceProvider provider, - IServiceFactory factory, - IMediator mediator, - IPublisher publisher, - ISubscriber subscriber, - IDisposer disposer, - TAction action, - TConfiguration configuration, - Func valueDelegate, - object header, - object description) : - ValueViewModel(provider, factory, mediator, publisher, subscriber, disposer), - IComponentConfigurationViewModel, - INotificationHandler> - where TConfiguration : class -{ - [ObservableProperty] - private TAction action = action; - - [ObservableProperty] - private object header = header; - - [ObservableProperty] - private object description = description; - - public override Task OnActivated() - { - Value = valueDelegate.Invoke(configuration); - return base.OnActivated(); - } - - public Task Handle(ChangedEventArgs args) - { - if (args.Sender is TConfiguration configuration) - { - Value = valueDelegate.Invoke(configuration); - } - - return Task.CompletedTask; - } -} - -public partial class ComponentConfigurationViewModel(IServiceProvider provider, - IServiceFactory factory, - IMediator mediator, - IPublisher publisher, - ISubscriber subscriber, - IDisposer disposer, - TAction action, - TDescription description, - TConfiguration configuration, - Func valueDelegate, - object header) : - ValueViewModel(provider, factory, mediator, publisher, subscriber, disposer), - IComponentConfigurationViewModel, - INotificationHandler> - where TConfiguration : class -{ - [ObservableProperty] - private TAction action = action; - - [ObservableProperty] - private object header = header; - - [ObservableProperty] - private TDescription description = description; - - public override Task OnActivated() - { - Value = valueDelegate.Invoke(configuration); - return base.OnActivated(); - } - - public Task Handle(ChangedEventArgs args) - { - if (args.Sender is TConfiguration configuration) - { - Value = valueDelegate.Invoke(configuration); - } - - return Task.CompletedTask; - } -} \ No newline at end of file diff --git a/Toolkit.Foundation/ComponentContentConfiguration.cs b/Toolkit.Foundation/ComponentContentConfiguration.cs deleted file mode 100644 index 2081553..0000000 --- a/Toolkit.Foundation/ComponentContentConfiguration.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Toolkit.Foundation; - -public record ComponentContentConfiguration -{ - // public string ContentRoot { get; set; } = "Local"; - - public string JsonFileName { get; set; } = "Settings2.json"; -} \ No newline at end of file diff --git a/Toolkit.Foundation/ConfigurationValueViewModel.cs b/Toolkit.Foundation/ConfigurationValueViewModel.cs index 2505d70..a208002 100644 --- a/Toolkit.Foundation/ConfigurationValueViewModel.cs +++ b/Toolkit.Foundation/ConfigurationValueViewModel.cs @@ -7,23 +7,28 @@ public partial class ConfigurationValueViewModel(IServic ISubscriber subscriber, IDisposer disposer, TConfiguration configuration, - Func valueDelegate) : + IWritableConfiguration writer, + Func read, + Action write) : ValueViewModel(provider, factory, mediator, publisher, subscriber, disposer), INotificationHandler> where TConfiguration : class { - private readonly TConfiguration configuration = configuration; - - private readonly Func valueDelegate = valueDelegate; - public Task Handle(ChangedEventArgs args) { + throw new NotImplementedException(); } + protected override void OnChanged(TValue? value) + { + writer.Write(args => write(value, args)); + base.OnChanged(value); + } + public override Task OnActivated() { - Value = valueDelegate(configuration); + Value = read(configuration); return base.OnActivated(); } } \ No newline at end of file diff --git a/Toolkit.Foundation/IServiceCollectionExtensions.cs b/Toolkit.Foundation/IServiceCollectionExtensions.cs index 3e8c6a6..c0c8c56 100644 --- a/Toolkit.Foundation/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/IServiceCollectionExtensions.cs @@ -105,6 +105,7 @@ public static class IServiceCollectionExtensions services.AddTransient(); return services; } + public static IServiceCollection AddRange(this IServiceCollection services, IServiceCollection fromServices) { @@ -166,22 +167,24 @@ public static class IServiceCollectionExtensions } public static IServiceCollection AddValueTemplate(this IServiceCollection services, - Func valueDelegate, + Func readDelegate, + Action writeDelegate, object? key = null, ServiceLifetime serviceLifetime = ServiceLifetime.Transient, params object[]? parameters) { - parameters = [valueDelegate, .. parameters ?? Enumerable.Empty()]; + parameters = [readDelegate, writeDelegate, .. parameters ?? Enumerable.Empty()]; return AddTemplate(services, key, serviceLifetime, parameters); } public static IServiceCollection AddValueTemplate(this IServiceCollection services, - Func valueDelegate, + Func readDelegate, + Action writeDelegate, object? key = null, ServiceLifetime serviceLifetime = ServiceLifetime.Transient, params object[]? parameters) { - parameters = [valueDelegate, .. parameters ?? Enumerable.Empty()]; + parameters = [readDelegate, writeDelegate, .. parameters ?? Enumerable.Empty()]; return AddTemplate(services, key, serviceLifetime, parameters); } } \ No newline at end of file