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(); await CheckCreatePolicyAsync();
var providerType = await _paymentServiceResolver.GetProviderTypeOrDefaultAsync(input.PaymentMethod) ?? var providerType = _paymentServiceResolver.GetProviderTypeOrDefault(input.PaymentMethod) ??
throw new UnknownPaymentMethodException(input.PaymentMethod); throw new UnknownPaymentMethodException(input.PaymentMethod);
var provider = ServiceProvider.GetService(providerType) as IPaymentServiceProvider ?? 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 class EShopPaymentsDomainModule : AbpModule
{ {
public override void PostConfigureServices(ServiceConfigurationContext context) public override void OnPostApplicationInitialization(ApplicationInitializationContext context)
{
context.Services.TryAddTransient<IPaymentServiceProvider, FreePaymentServiceProvider>();
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{ {
var resolver = context.ServiceProvider.GetService<IPaymentServiceResolver>(); 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) 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 namespace EasyAbp.EShop.Payments.Payments
{ {
// [ExposeServices(typeof(IPaymentRepository))] public class FreePaymentServiceProvider : IPaymentServiceProvider, ITransientDependency
// [Dependency(ServiceLifetime.Transient, TryRegister = true)]
public class FreePaymentServiceProvider : IPaymentServiceProvider
{ {
private readonly IClock _clock; private readonly IClock _clock;
private readonly IPaymentRepository _paymentRepository; 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 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; _serviceProvider = serviceProvider;
} }
public virtual Task<bool> TryRegisterProviderAsync(string paymentMethod, Type providerType) public virtual bool TryRegisterProvider(string paymentMethod, Type providerType)
{ {
if (Providers.ContainsKey(paymentMethod)) if (Providers.ContainsKey(paymentMethod))
{ {
return Task.FromResult(false); return false;
} }
using (var scope = _serviceProvider.CreateScope()) using (var scope = _serviceProvider.CreateScope())
{ {
if (scope.ServiceProvider.GetService(providerType) == null) if (scope.ServiceProvider.GetService(providerType) == null)
{ {
return Task.FromResult(false); return false;
} }
} }
Providers.Add(paymentMethod, providerType); 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>(); var resolver = context.ServiceProvider.GetService<IPaymentServiceResolver>();
resolver.TryRegisterProviderAsync(WeChatPayPaymentServiceProvider.PaymentMethod, typeof(WeChatPayPaymentServiceProvider)); resolver.TryRegisterProvider(WeChatPayPaymentServiceProvider.PaymentMethod, typeof(WeChatPayPaymentServiceProvider));
} }
} }
} }

Loading…
Cancel
Save