Gateways.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using PaySharp.Core.Exceptions;
  4. namespace PaySharp.Core
  5. {
  6. /// <summary>
  7. /// 网关集合类
  8. /// </summary>
  9. public class Gateways : IGateways
  10. {
  11. #region 私有字段
  12. private readonly ICollection<BaseGateway> _list;
  13. #endregion
  14. #region 属性
  15. /// <summary>
  16. /// 网关数量
  17. /// </summary>
  18. public int Count => _list.Count;
  19. #endregion
  20. #region 构造函数
  21. /// <summary>
  22. /// 构造函数
  23. /// </summary>
  24. public Gateways()
  25. {
  26. _list = new List<BaseGateway>();
  27. }
  28. #endregion
  29. #region 方法
  30. /// <summary>
  31. /// 添加网关
  32. /// </summary>
  33. /// <param name="gateway">网关</param>
  34. /// <returns></returns>
  35. public bool Add(BaseGateway gateway)
  36. {
  37. if (gateway != null)
  38. {
  39. if (!Exist(gateway.Merchant.AppId))
  40. {
  41. _list.Add(gateway);
  42. return true;
  43. }
  44. else
  45. {
  46. throw new GatewayException("该商户数据已存在");
  47. }
  48. }
  49. return false;
  50. }
  51. /// <summary>
  52. /// 获取指定网关
  53. /// </summary>
  54. /// <typeparam name="T">网关类型</typeparam>
  55. /// <returns></returns>
  56. public BaseGateway Get<T>()
  57. {
  58. var gatewayList = _list
  59. .Where(a => a is T)
  60. .ToList();
  61. return gatewayList.Count > 0 ? gatewayList[0] : throw new GatewayException("找不到指定网关");
  62. }
  63. /// <summary>
  64. /// 通过AppId获取网关
  65. /// </summary>
  66. /// <typeparam name="T">网关类型</typeparam>
  67. /// <param name="appId">AppId</param>
  68. /// <returns></returns>
  69. public BaseGateway Get<T>(string appId)
  70. {
  71. var gatewayList = _list
  72. .Where(a => a is T && a.Merchant.AppId == appId)
  73. .ToList();
  74. var gateway = gatewayList.Count > 0 ? gatewayList[0] : throw new GatewayException("找不到指定网关");
  75. return gateway;
  76. }
  77. /// <summary>
  78. /// 指定AppId是否存在
  79. /// </summary>
  80. /// <param name="appId">appId</param>
  81. /// <returns></returns>
  82. private bool Exist(string appId) => _list.Any(a => a.Merchant.AppId == appId);
  83. /// <summary>
  84. /// 获取网关列表
  85. /// </summary>
  86. /// <returns></returns>
  87. public ICollection<BaseGateway> GetList()
  88. {
  89. return _list;
  90. }
  91. #endregion
  92. }
  93. }