From fbb9d3c6afadbec3b8cad223ded78b1c5ca70674 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 6 Feb 2024 14:25:35 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpayv2):=20=E6=9E=84=E9=80=A0=E5=99=A8?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WechatTenpayClientBuilder.cs | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV2/WechatTenpayClientBuilder.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/WechatTenpayClientBuilder.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/WechatTenpayClientBuilder.cs new file mode 100644 index 00000000..3e2cd04c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/WechatTenpayClientBuilder.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Net.Http; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 +{ + /// + /// 用于构造 实例的构造器。 + /// + public partial class WechatTenpayClientBuilder : ICommonClientBuilder + { + private readonly WechatTenpayClientOptions _options; + private readonly IList> _configures; + private readonly IList _interceptors; + private HttpClient? _httpClient; + private bool? _disposeClient; + + private WechatTenpayClientBuilder(WechatTenpayClientOptions options) + { + _options = options; + _configures = new List>(); + _interceptors = new List(); + } + + ICommonClientBuilder ICommonClientBuilder.ConfigureSettings(Action configure) + { + return ConfigureSettings(configure); + } + + ICommonClientBuilder ICommonClientBuilder.UseInterceptor(HttpInterceptor interceptor) + { + return UseInterceptor(interceptor); + } + + ICommonClientBuilder ICommonClientBuilder.UseHttpClient(HttpClient httpClient, bool disposeClient) + { + return UseHttpClient(httpClient, disposeClient); + } + + public WechatTenpayClientBuilder ConfigureSettings(Action configure) + { + if (configure is null) throw new ArgumentNullException(nameof(configure)); + + _configures.Add(configure); + return this; + } + + public WechatTenpayClientBuilder UseInterceptor(HttpInterceptor interceptor) + { + if (interceptor is null) throw new ArgumentNullException(nameof(interceptor)); + + _interceptors.Add(interceptor); + return this; + } + + public WechatTenpayClientBuilder UseHttpClient(HttpClient httpClient, bool disposeClient = true) + { + if (httpClient is null) throw new ArgumentNullException(nameof(httpClient)); + + _httpClient = httpClient; + _disposeClient = disposeClient; + return this; + } + + public WechatTenpayClient Build() + { + WechatTenpayClient client = _disposeClient.HasValue + ? new WechatTenpayClient(_options, _httpClient, _disposeClient.Value) + : new WechatTenpayClient(_options, _httpClient); + + foreach (Action configure in _configures) + { + client.Configure(configure); + } + + foreach (HttpInterceptor interceptor in _interceptors) + { + client.Interceptors.Add(interceptor); + } + + return client; + } + } + + partial class WechatTenpayClientBuilder + { + public static WechatTenpayClientBuilder Create(WechatTenpayClientOptions options) + { + if (options is null) throw new ArgumentNullException(nameof(options)); + + return new WechatTenpayClientBuilder(options); + } + } +}