Commit 978f1fd1 authored by gdlcf88's avatar gdlcf88

Redesigned PaymentServiceResolver

parent 9da44f87
...@@ -32,7 +32,7 @@ namespace EasyAbp.EShop.Payments.Payments ...@@ -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 ??
......
...@@ -16,16 +16,14 @@ namespace EasyAbp.EShop.Payments ...@@ -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)
......
...@@ -7,9 +7,7 @@ using Volo.Abp.Timing; ...@@ -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,10 +6,10 @@ namespace EasyAbp.EShop.Payments.Payments ...@@ -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);
} }
} }
\ No newline at end of file
...@@ -18,34 +18,34 @@ namespace EasyAbp.EShop.Payments.Payments ...@@ -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);
} }
} }
} }
\ No newline at end of file
...@@ -60,7 +60,7 @@ namespace EasyMall ...@@ -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));
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment