Commit 978f1fd1 authored by gdlcf88's avatar gdlcf88

Redesigned PaymentServiceResolver

parent 9da44f87
......@@ -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 ??
......
......@@ -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)
......
......@@ -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,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);
}
}
\ No newline at end of file
......@@ -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);
}
}
}
\ No newline at end of file
......@@ -60,7 +60,7 @@ namespace EasyMall
{
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