From b781f18758ac501f3fc37c667c1bb5b4c098f5e9 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Wed, 2 Oct 2024 17:23:23 +0100 Subject: [PATCH] Added ConfigurationValueViewModel and AddValueTemplate extension --- .../ConfigurationValueViewModel.cs | 29 ++++++++++++ .../IServiceCollectionExtensions.cs | 45 +++++++++++++------ Toolkit.Foundation/Toolkit.Foundation.csproj | 3 -- 3 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 Toolkit.Foundation/ConfigurationValueViewModel.cs diff --git a/Toolkit.Foundation/ConfigurationValueViewModel.cs b/Toolkit.Foundation/ConfigurationValueViewModel.cs new file mode 100644 index 0000000..2505d70 --- /dev/null +++ b/Toolkit.Foundation/ConfigurationValueViewModel.cs @@ -0,0 +1,29 @@ +namespace Toolkit.Foundation; + +public partial class ConfigurationValueViewModel(IServiceProvider provider, + IServiceFactory factory, + IMediator mediator, + IPublisher publisher, + ISubscriber subscriber, + IDisposer disposer, + TConfiguration configuration, + Func valueDelegate) : + 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(); + } + + public override Task OnActivated() + { + Value = valueDelegate(configuration); + return base.OnActivated(); + } +} \ No newline at end of file diff --git a/Toolkit.Foundation/IServiceCollectionExtensions.cs b/Toolkit.Foundation/IServiceCollectionExtensions.cs index 6b9b822..3e8c6a6 100644 --- a/Toolkit.Foundation/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/IServiceCollectionExtensions.cs @@ -4,8 +4,16 @@ namespace Toolkit.Foundation; public static class IServiceCollectionExtensions { + public static IServiceCollection AddAsyncInitialization(this IServiceCollection services) + where TInitialization : class, + IAsyncInitialization + { + services.AddTransient(); + return services; + } + public static IServiceCollection AddCache(this IServiceCollection services) - where TKey : notnull + where TKey : notnull where TValue : notnull { services.AddScoped, Cache>(); @@ -97,15 +105,6 @@ public static class IServiceCollectionExtensions services.AddTransient(); return services; } - - public static IServiceCollection AddAsyncInitialization(this IServiceCollection services) - where TInitialization : class, - IAsyncInitialization - { - services.AddTransient(); - return services; - } - public static IServiceCollection AddRange(this IServiceCollection services, IServiceCollection fromServices) { @@ -124,7 +123,7 @@ public static class IServiceCollectionExtensions { return AddTemplate(services, key, serviceLifetime, parameters); } - + public static IServiceCollection AddTemplate(this IServiceCollection services, object? key = null, ServiceLifetime serviceLifetime = ServiceLifetime.Transient, @@ -142,7 +141,7 @@ public static class IServiceCollectionExtensions } else { - services.Add(new ServiceDescriptor(viewModelImplementationType, provider => + services.Add(new ServiceDescriptor(viewModelType, provider => provider.GetRequiredService().Create(parameters)!, serviceLifetime)); } @@ -154,7 +153,7 @@ public static class IServiceCollectionExtensions } else { - services.Add(new ServiceDescriptor(viewModelImplementationType, key, (provider, key) => + services.Add(new ServiceDescriptor(viewModelType, key, (provider, key) => provider.GetRequiredService().Create(parameters)!, serviceLifetime)); } @@ -165,4 +164,24 @@ public static class IServiceCollectionExtensions return services; } + + public static IServiceCollection AddValueTemplate(this IServiceCollection services, + Func valueDelegate, + object? key = null, + ServiceLifetime serviceLifetime = ServiceLifetime.Transient, + params object[]? parameters) + { + parameters = [valueDelegate, .. parameters ?? Enumerable.Empty()]; + return AddTemplate(services, key, serviceLifetime, parameters); + } + + public static IServiceCollection AddValueTemplate(this IServiceCollection services, + Func valueDelegate, + object? key = null, + ServiceLifetime serviceLifetime = ServiceLifetime.Transient, + params object[]? parameters) + { + parameters = [valueDelegate, .. parameters ?? Enumerable.Empty()]; + return AddTemplate(services, key, serviceLifetime, parameters); + } } \ No newline at end of file diff --git a/Toolkit.Foundation/Toolkit.Foundation.csproj b/Toolkit.Foundation/Toolkit.Foundation.csproj index a4dbcfd..8ff9be3 100644 --- a/Toolkit.Foundation/Toolkit.Foundation.csproj +++ b/Toolkit.Foundation/Toolkit.Foundation.csproj @@ -4,9 +4,6 @@ enable enable - - -