Browse Source

Redesigned PaymentServiceResolver

pull/49/head
gdlcf88 6 years ago
parent
commit
978f1fd108
  1. 2
      modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application/EasyAbp/EShop/Payments/Payments/PaymentAppService.cs
  2. 12
      modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/EShopPaymentsDomainModule.cs
  3. 4
      modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/FreePaymentServiceProvider.cs
  4. 6
      modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/IPaymentServiceResolver.cs
  5. 16
      modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/PaymentServiceResolver.cs
  6. 2
      samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMallDomainModule.cs

2
modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Application/EasyAbp/EShop/Payments/Payments/PaymentAppService.cs

@ -32,7 +32,7 @@ namespace EasyAbp.EShop.Payments.Payments
{
await CheckCreatePolicyAsync();
var providerType = await _paymentServiceResolver.GetProviderTypeOrDefaultAsync(input.PaymentMethod) ??
var providerType = _paymentServiceResolver.GetProviderTypeOrDefault(input.PaymentMethod) ??
throw new UnknownPaymentMethodException(input.PaymentMethod);
var provider = ServiceProvider.GetService(providerType) as IPaymentServiceProvider ??

12
modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/EShopPaymentsDomainModule.cs

@ -16,16 +16,14 @@ namespace EasyAbp.EShop.Payments
)]
public class EShopPaymentsDomainModule : AbpModule
{
public override void PostConfigureServices(ServiceConfigurationContext context)
{
context.Services.TryAddTransient<IPaymentServiceProvider, FreePaymentServiceProvider>();
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
public override void OnPostApplicationInitialization(ApplicationInitializationContext context)
{
var resolver = context.ServiceProvider.GetService<IPaymentServiceResolver>();
resolver.TryRegisterProviderAsync(FreePaymentServiceProvider.PaymentMethod, typeof(FreePaymentServiceProvider));
if (resolver.GetPaymentMethods().Count == 0)
{
resolver.TryRegisterProvider(FreePaymentServiceProvider.PaymentMethod, typeof(FreePaymentServiceProvider));
}
}
public override void ConfigureServices(ServiceConfigurationContext context)

4
modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/FreePaymentServiceProvider.cs

@ -7,9 +7,7 @@ using Volo.Abp.Timing;
namespace EasyAbp.EShop.Payments.Payments
{
// [ExposeServices(typeof(IPaymentRepository))]
// [Dependency(ServiceLifetime.Transient, TryRegister = true)]
public class FreePaymentServiceProvider : IPaymentServiceProvider
public class FreePaymentServiceProvider : IPaymentServiceProvider, ITransientDependency
{
private readonly IClock _clock;
private readonly IPaymentRepository _paymentRepository;

6
modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/IPaymentServiceResolver.cs

@ -6,10 +6,10 @@ namespace EasyAbp.EShop.Payments.Payments
{
public interface IPaymentServiceResolver
{
Task<bool> TryRegisterProviderAsync(string paymentMethod, Type providerType);
bool TryRegisterProvider(string paymentMethod, Type providerType);
Task<List<string>> GetPaymentMethodsAsync();
List<string> GetPaymentMethods();
Task<Type> GetProviderTypeOrDefaultAsync(string paymentMethod);
Type GetProviderTypeOrDefault(string paymentMethod);
}
}

16
modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.Domain/EasyAbp/EShop/Payments/Payments/PaymentServiceResolver.cs

@ -18,34 +18,34 @@ namespace EasyAbp.EShop.Payments.Payments
_serviceProvider = serviceProvider;
}
public virtual Task<bool> TryRegisterProviderAsync(string paymentMethod, Type providerType)
public virtual bool TryRegisterProvider(string paymentMethod, Type providerType)
{
if (Providers.ContainsKey(paymentMethod))
{
return Task.FromResult(false);
return false;
}
using (var scope = _serviceProvider.CreateScope())
{
if (scope.ServiceProvider.GetService(providerType) == null)
{
return Task.FromResult(false);
return false;
}
}
Providers.Add(paymentMethod, providerType);
return Task.FromResult(true);
return true;
}
public virtual Task<List<string>> GetPaymentMethodsAsync()
public virtual List<string> GetPaymentMethods()
{
return Task.FromResult(Providers.Keys.ToList());
return Providers.Keys.ToList();
}
public virtual Task<Type> GetProviderTypeOrDefaultAsync(string paymentMethod)
public virtual Type GetProviderTypeOrDefault(string paymentMethod)
{
return Task.FromResult(Providers.GetOrDefault(paymentMethod));
return Providers.GetOrDefault(paymentMethod);
}
}
}

2
samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMallDomainModule.cs

@ -60,7 +60,7 @@ namespace EasyMall
{
var resolver = context.ServiceProvider.GetService<IPaymentServiceResolver>();
resolver.TryRegisterProviderAsync(WeChatPayPaymentServiceProvider.PaymentMethod, typeof(WeChatPayPaymentServiceProvider));
resolver.TryRegisterProvider(WeChatPayPaymentServiceProvider.PaymentMethod, typeof(WeChatPayPaymentServiceProvider));
}
}
}

Loading…
Cancel
Save