From 0871c42438d60e736ceed88bf066bd05e3c55537 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Thu, 26 Sep 2024 21:00:06 +0100 Subject: [PATCH] Add TViewModelImplementation to add AddTemplate extension --- .../IServiceCollectionExtensions.cs | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Toolkit.Foundation/IServiceCollectionExtensions.cs b/Toolkit.Foundation/IServiceCollectionExtensions.cs index 88e4bcf..0b963b3 100644 --- a/Toolkit.Foundation/IServiceCollectionExtensions.cs +++ b/Toolkit.Foundation/IServiceCollectionExtensions.cs @@ -113,38 +113,47 @@ public static class IServiceCollectionExtensions object? key = null, ServiceLifetime serviceLifetime = ServiceLifetime.Transient, params object[]? parameters) + { + return AddTemplate(services, key, serviceLifetime, parameters); + } + + public static IServiceCollection AddTemplate(this IServiceCollection services, + object? key = null, + ServiceLifetime serviceLifetime = ServiceLifetime.Transient, + params object[]? parameters) { Type viewModelType = typeof(TViewModel); + Type viewModelImplementationType = typeof(TViewModelImplementation); Type viewType = typeof(TView); - key ??= viewModelType.Name.Replace("ViewModel", ""); + key ??= viewModelImplementationType.Name.Replace("ViewModel", ""); if (parameters is { Length: 0 }) { - services.Add(new ServiceDescriptor(viewModelType, viewModelType, serviceLifetime)); + services.Add(new ServiceDescriptor(viewModelType, viewModelImplementationType, serviceLifetime)); } else { - services.Add(new ServiceDescriptor(viewModelType, provider => - provider.GetRequiredService().Create(parameters)!, serviceLifetime)); + services.Add(new ServiceDescriptor(viewModelImplementationType, provider => + provider.GetRequiredService().Create(parameters)!, serviceLifetime)); } services.Add(new ServiceDescriptor(viewType, viewType, serviceLifetime)); if (parameters is { Length: 0 }) { - services.Add(new ServiceDescriptor(viewModelType, key, viewModelType, serviceLifetime)); + services.Add(new ServiceDescriptor(viewModelType, key, viewModelImplementationType, serviceLifetime)); } else { - services.Add(new ServiceDescriptor(viewModelType, key, (provider, key) => - provider.GetRequiredService().Create(parameters)!, serviceLifetime)); + services.Add(new ServiceDescriptor(viewModelImplementationType, key, (provider, key) => + provider.GetRequiredService().Create(parameters)!, serviceLifetime)); } services.Add(new ServiceDescriptor(viewType, key, viewType, serviceLifetime)); services.AddKeyedTransient(key, (provider, _) => - new ContentTemplateDescriptor(key, viewModelType, viewType, parameters)); + new ContentTemplateDescriptor(key, viewModelImplementationType, viewType, parameters)); return services; }