Commit a647720b authored by gdlcf88's avatar gdlcf88

Completed PaymentServiceResolver

parent 37d907ed
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
......
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace EasyAbp.EShop.Payments.Payments
{
public interface IPaymentServiceResolver
{
Task<bool> TryRegisterProviderAsync(string paymentMethod, Type providerType);
Task<List<string>> GetPaymentMethodsAsync();
Task<Type> GetProviderTypeOrDefaultAsync(string paymentMethod);
}
}
\ No newline at end of file
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<string, Type> Providers = new Dictionary<string, Type>();
private readonly IServiceProvider _serviceProvider;
public PaymentServiceResolver(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public virtual Task<bool> 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<List<string>> GetPaymentMethodsAsync()
{
return Task.FromResult(Providers.Keys.ToList());
}
public virtual Task<Type> GetProviderTypeOrDefaultAsync(string paymentMethod)
{
return Task.FromResult(Providers.GetOrDefault(paymentMethod));
}
}
}
\ No newline at end of file
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