Skip to content

Commit f8c3544

Browse files
committed
HttpApiFactory修改为非泛型
1 parent 9887f88 commit f8c3544

File tree

4 files changed

+22
-34
lines changed

4 files changed

+22
-34
lines changed

WebApiClientCore/BuildInProxies/HttpApiActivator.cs

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using System.Threading;
34

45
namespace WebApiClientCore
56
{
@@ -12,14 +13,22 @@ abstract class HttpApiActivator<THttpApi>
1213
/// <summary>
1314
/// 实例工厂
1415
/// </summary>
15-
private readonly Func<IActionInterceptor, THttpApi> factory;
16+
private static Func<IActionInterceptor, THttpApi>? _factory;
1617

1718
/// <summary>
18-
/// THttpApi的实例创建器抽象
19+
/// 创建接口的实例
1920
/// </summary>
20-
public HttpApiActivator()
21+
/// <param name="interceptor">拦截器</param>
22+
/// <returns></returns>
23+
public THttpApi CreateInstance(IActionInterceptor interceptor)
2124
{
22-
this.factory = this.CreateFactory();
25+
var factory = Volatile.Read(ref _factory);
26+
if (factory == null)
27+
{
28+
Interlocked.CompareExchange(ref _factory, this.CreateFactory(), null);
29+
factory = _factory;
30+
}
31+
return factory(interceptor);
2332
}
2433

2534
/// <summary>
@@ -28,16 +37,6 @@ public HttpApiActivator()
2837
/// <returns></returns>
2938
protected abstract Func<IActionInterceptor, THttpApi> CreateFactory();
3039

31-
/// <summary>
32-
/// 创建接口的实例
33-
/// </summary>
34-
/// <param name="interceptor">拦截器</param>
35-
/// <returns></returns>
36-
public THttpApi CreateInstance(IActionInterceptor interceptor)
37-
{
38-
return this.factory(interceptor);
39-
}
40-
4140
/// <summary>
4241
/// 返回接口的action执行器
4342
/// </summary>

WebApiClientCore/BuildInProxies/HttpApiEmitActivator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class HttpApiEmitActivator<THttpApi> : HttpApiActivator<THttpApi>
1515
/// <summary>
1616
/// 创建实例工厂
1717
/// </summary>
18+
/// <exception cref="NotSupportedException"></exception>
19+
/// <exception cref="ProxyTypeCreateException"></exception>
1820
/// <returns></returns>
1921
protected override Func<IActionInterceptor, THttpApi> CreateFactory()
2022
{
@@ -27,7 +29,7 @@ protected override Func<IActionInterceptor, THttpApi> CreateFactory()
2729
/// <summary>
2830
/// 提供IHttpApi代理类的类型创建
2931
/// </summary>
30-
static class ProxyTypeBuilder
32+
private static class ProxyTypeBuilder
3133
{
3234
/// <summary>
3335
/// IActionInterceptor的Intercept方法
Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,24 @@
11
using System;
2-
using System.Threading;
32
using WebApiClientCore.Exceptions;
43

54
namespace WebApiClientCore
65
{
76
/// <summary>
87
/// 表示THttpApi的创建工厂
9-
/// </summary>
10-
/// <typeparam name="THttpApi">接口类型</typeparam>
11-
static class HttpApiFactory<THttpApi>
8+
/// </summary>
9+
static class HttpApiFactory
1210
{
13-
/// <summary>
14-
/// 实例创建者
15-
/// </summary>
16-
private static HttpApiActivator<THttpApi>? _activator;
17-
1811
/// <summary>
1912
/// 创建接口的实例
2013
/// </summary>
14+
/// <typeparam name="THttpApi"></typeparam>
2115
/// <param name="actionInterceptor">拦截器</param>
2216
/// <exception cref="NotSupportedException"></exception>
2317
/// <exception cref="ProxyTypeCreateException"></exception>
2418
/// <returns></returns>
25-
public static THttpApi Create(IActionInterceptor actionInterceptor)
19+
public static THttpApi Create<THttpApi>(IActionInterceptor actionInterceptor)
2620
{
27-
var activator = Volatile.Read(ref _activator);
28-
if (activator == null)
29-
{
30-
Interlocked.CompareExchange(ref _activator, new HttpApiEmitActivator<THttpApi>(), null);
31-
activator = _activator;
32-
}
33-
34-
return activator.CreateInstance(actionInterceptor);
21+
return new HttpApiEmitActivator<THttpApi>().CreateInstance(actionInterceptor);
3522
}
3623
}
3724
}

WebApiClientCore/HttpApi.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static THttpApi Create<THttpApi>(HttpClientContext httpClientContext)
6464
/// <returns></returns>
6565
public static THttpApi Create<THttpApi>(IActionInterceptor actionInterceptor)
6666
{
67-
return HttpApiFactory<THttpApi>.Create(actionInterceptor);
67+
return HttpApiFactory.Create<THttpApi>(actionInterceptor);
6868
}
6969

7070

0 commit comments

Comments
 (0)