From a647720bbf26afcfe156c1f6ee493c66dbf68c2d Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Wed, 6 May 2020 18:17:44 +0800 Subject: [PATCH] Completed PaymentServiceResolver --- .../FreePaymentServiceProvider.cs | 3 +- .../Payments/IPaymentServiceResolver.cs | 15 ++++++ .../Payments/PaymentServiceResolver.cs | 51 +++++++++++++++++++ 3 files changed, 67 insertions(+), 2 deletions(-) rename modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/{ => Payments}/FreePaymentServiceProvider.cs (87%) create mode 100644 modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/IPaymentServiceResolver.cs create mode 100644 modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/PaymentServiceResolver.cs diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/FreePaymentServiceProvider.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/FreePaymentServiceProvider.cs similarity index 87% rename from modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/FreePaymentServiceProvider.cs rename to modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/FreePaymentServiceProvider.cs index 5bacae0a..5a47da43 100644 --- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/FreePaymentServiceProvider.cs +++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/FreePaymentServiceProvider.cs @@ -1,10 +1,9 @@ using System.Collections.Generic; using System.Threading.Tasks; -using EasyAbp.EShop.Payments.Payments; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; -namespace EasyAbp.EShop.Payments +namespace EasyAbp.EShop.Payments.Payments { [Dependency(ServiceLifetime.Transient, TryRegister = true)] public class FreePaymentServiceProvider : IPaymentServiceProvider diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/IPaymentServiceResolver.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/IPaymentServiceResolver.cs new file mode 100644 index 00000000..ee68b31a --- /dev/null +++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/IPaymentServiceResolver.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace EasyAbp.EShop.Payments.Payments +{ + public interface IPaymentServiceResolver + { + Task TryRegisterProviderAsync(string paymentMethod, Type providerType); + + Task> GetPaymentMethodsAsync(); + + Task GetProviderTypeOrDefaultAsync(string paymentMethod); + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/PaymentServiceResolver.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/PaymentServiceResolver.cs new file mode 100644 index 00000000..8ead7dd1 --- /dev/null +++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/Payments/PaymentServiceResolver.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.DependencyInjection; + +namespace EasyAbp.EShop.Payments.Payments +{ + public class PaymentServiceResolver : IPaymentServiceResolver, ISingletonDependency + { + protected readonly Dictionary Providers = new Dictionary(); + + private readonly IServiceProvider _serviceProvider; + + public PaymentServiceResolver(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public virtual Task TryRegisterProviderAsync(string paymentMethod, Type providerType) + { + if (Providers.ContainsKey(paymentMethod)) + { + return Task.FromResult(false); + } + + using (var scope = _serviceProvider.CreateScope()) + { + if (scope.ServiceProvider.GetService(providerType) == null) + { + return Task.FromResult(false); + } + } + + Providers.Add(paymentMethod, providerType); + + return Task.FromResult(true); + } + + public virtual Task> GetPaymentMethodsAsync() + { + return Task.FromResult(Providers.Keys.ToList()); + } + + public virtual Task GetProviderTypeOrDefaultAsync(string paymentMethod) + { + return Task.FromResult(Providers.GetOrDefault(paymentMethod)); + } + } +} \ No newline at end of file