Skip to content

Commit 6b52ea4

Browse files
committed
add UseILEmitHttpApiActivator()
1 parent f19c68d commit 6b52ea4

File tree

7 files changed

+49
-53
lines changed

7 files changed

+49
-53
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<PropertyGroup>
3-
<Version>2.0.9</Version>
3+
<Version>2.1.0</Version>
44
<Copyright>Copyright © laojiu 2017-2024</Copyright>
55
<NoWarn>IDE0057;IDE0290</NoWarn>
66
</PropertyGroup>

WebApiClientCore.Extensions.SourceGenerator/WebApiClientBuilderExtensions.cs

Lines changed: 0 additions & 22 deletions
This file was deleted.

WebApiClientCore.Extensions.SourceGenerator/WebApiClientCore.Extensions.SourceGenerator.csproj

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<Nullable>enable</Nullable>
4-
<!--2.0.8将是其最后一个版本-->
5-
<Version>2.0.8</Version>
4+
<IncludeBuildOutput>false</IncludeBuildOutput>
65
<TargetFramework>netstandard2.1</TargetFramework>
7-
<DocumentationFile>$(TargetPath)\$(AssemblyName).xml</DocumentationFile>
8-
96
<SignAssembly>true</SignAssembly>
107
<AssemblyOriginatorKeyFile>Sign.snk</AssemblyOriginatorKeyFile>
11-
12-
<Description>WebApiClientCore的接口代理类代码生成扩展</Description>
13-
<Summary>WebApiClientCore的接口代理类代码生成扩展</Summary>
8+
<Summary>此扩展包的实现已合并到WebApiClientCore包,无任何功能</Summary>
9+
<Description>此扩展包的实现已合并到WebApiClientCore包,无任何功能</Description>
1410
</PropertyGroup>
15-
1611
<ItemGroup>
1712
<ProjectReference Include="..\WebApiClientCore\WebApiClientCore.csproj" />
1813
</ItemGroup>

WebApiClientCore/DependencyInjection/HttpApiConfigureExtensions.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace Microsoft.Extensions.DependencyInjection
1111
public static class HttpApiConfigureExtensions
1212
{
1313
/// <summary>
14-
/// 为接口配置HttpApiOptions
14+
/// 为接口配置<see cref="HttpApiOptions"/>
1515
/// </summary>
1616
/// <typeparam name="THttpApi"></typeparam>
1717
/// <param name="services"></param>
@@ -23,7 +23,7 @@ public static IServiceCollection ConfigureHttpApi<THttpApi>(this IServiceCollect
2323
}
2424

2525
/// <summary>
26-
/// 为接口配置HttpApiOptions
26+
/// 为接口配置<see cref="HttpApiOptions"/>
2727
/// </summary>
2828
/// <typeparam name="THttpApi"></typeparam>
2929
/// <param name="services"></param>
@@ -35,7 +35,7 @@ public static IServiceCollection ConfigureHttpApi<THttpApi>(this IServiceCollect
3535
}
3636

3737
/// <summary>
38-
/// 为接口配置HttpApiOptions
38+
/// 为接口配置<see cref="HttpApiOptions"/>
3939
/// </summary>
4040
/// <typeparam name="THttpApi"></typeparam>
4141
/// <param name="services"></param>
@@ -49,7 +49,7 @@ public static IServiceCollection ConfigureHttpApi<THttpApi>(this IServiceCollect
4949

5050

5151
/// <summary>
52-
/// 为接口配置HttpApiOptions
52+
/// 为接口配置<see cref="HttpApiOptions"/>
5353
/// </summary>
5454
/// <param name="services"></param>
5555
/// <param name="httpApiType">接口类型</param>
@@ -61,7 +61,7 @@ public static IServiceCollection ConfigureHttpApi(this IServiceCollection servic
6161
}
6262

6363
/// <summary>
64-
/// 为接口配置HttpApiOptions
64+
/// 为接口配置<see cref="HttpApiOptions"/>
6565
/// </summary>
6666
/// <param name="services"></param>
6767
/// <param name="httpApiType">接口类型</param>
@@ -73,7 +73,7 @@ public static IServiceCollection ConfigureHttpApi(this IServiceCollection servic
7373
}
7474

7575
/// <summary>
76-
/// 为接口配置HttpApiOptions
76+
/// 为接口配置<see cref="HttpApiOptions"/>
7777
/// </summary>
7878
/// <param name="services"></param>
7979
/// <param name="httpApiType">接口类型</param>
@@ -85,7 +85,7 @@ public static IServiceCollection ConfigureHttpApi(this IServiceCollection servic
8585
}
8686

8787
/// <summary>
88-
/// 为接口配置HttpApiOptions
88+
/// 为接口配置<see cref="HttpApiOptions"/>
8989
/// </summary>
9090
/// <typeparam name="THttpApi"></typeparam>
9191
/// <param name="services"></param>
@@ -96,7 +96,7 @@ private static OptionsBuilder<HttpApiOptions> AddHttpApiOptions<THttpApi>(this I
9696
}
9797

9898
/// <summary>
99-
/// 为接口配置HttpApiOptions
99+
/// 为接口配置<see cref="HttpApiOptions"/>
100100
/// </summary>
101101
/// <param name="services"></param>
102102
/// <param name="httpApiType">接口类型</param>

WebApiClientCore/DependencyInjection/WebApiClientBuilderExtensions.cs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public static class WebApiClientBuilderExtensions
1818
/// 添加WebApiClient全局默认配置
1919
/// </summary>
2020
/// <remarks>
21-
/// <para>• 尝试使用DefaultHttpApiActivator,使用SourceGenerator生成的代理类或Emit动态创建代理类来创建代理实例</para>
22-
/// <para>• 尝试使用DefaultApiActionDescriptorProvider,缺省参数特性声明时为参数应用PathQueryAttribute</para>
23-
/// <para>• 尝试使用DefaultResponseCacheProvider,在内存中缓存响应结果</para>
24-
/// <para>• 尝试使用DefaultApiActionInvokerProvider</para>
21+
/// <para>• 尝试使用<see cref="DefaultHttpApiActivator{T}"/>,注册为<see cref="IHttpApiActivator{T}"/></para>
22+
/// <para>• 尝试使用<see cref="DefaultApiActionDescriptorProvider"/>,注册为<see cref="IApiActionDescriptorProvider"/></para>
23+
/// <para>• 尝试使用<see cref="DefaultResponseCacheProvider"/>,注册为<see cref="IResponseCacheProvider"/></para>
24+
/// <para>• 尝试使用<see cref="DefaultApiActionInvokerProvider"/>,注册为<see cref="IApiActionInvokerProvider"/></para>
2525
/// </remarks>
2626
/// <param name="services"></param>
2727
/// <returns></returns>
@@ -39,6 +39,29 @@ public static IWebApiClientBuilder AddWebApiClient(this IServiceCollection servi
3939
return new WebApiClientBuilder(services);
4040
}
4141

42+
43+
/// <summary>
44+
/// 使用 <see cref="ILEmitHttpApiActivator{T}"/> 替换 <see cref="IHttpApiActivator{T}"/> 的实现
45+
/// </summary>
46+
/// <param name="builder">IWebApiClientBuilder 实例</param>
47+
/// <returns>返回 IWebApiClientBuilder 实例</returns>
48+
public static IWebApiClientBuilder UseILEmitHttpApiActivator(this IWebApiClientBuilder builder)
49+
{
50+
builder.Services.RemoveAll(typeof(IHttpApiActivator<>)).AddSingleton(typeof(IHttpApiActivator<>), typeof(ILEmitHttpApiActivator<>));
51+
return builder;
52+
}
53+
54+
/// <summary>
55+
/// 使用 <see cref="SourceGeneratorHttpApiActivator{T}"/> 替换 <see cref="IHttpApiActivator{T}"/> 的实现
56+
/// </summary>
57+
/// <param name="builder"></param>
58+
/// <returns></returns>
59+
public static IWebApiClientBuilder UseSourceGeneratorHttpApiActivator(this IWebApiClientBuilder builder)
60+
{
61+
builder.Services.RemoveAll(typeof(IHttpApiActivator<>)).AddSingleton(typeof(IHttpApiActivator<>), typeof(SourceGeneratorHttpApiActivator<>));
62+
return builder;
63+
}
64+
4265
/// <summary>
4366
/// 当非GET或HEAD请求的缺省参数特性声明时
4467
/// 为复杂参数类型的参数应用JsonContentAttribute
@@ -52,7 +75,7 @@ public static IWebApiClientBuilder UseJsonFirstApiActionDescriptor(this IWebApiC
5275
}
5376

5477
/// <summary>
55-
/// 配置HttpApiOptions的默认值
78+
/// 配置<see cref="HttpApiOptions"/>的默认值
5679
/// </summary>
5780
/// <param name="builder"></param>
5881
/// <param name="configureOptions">配置选项</param>
@@ -64,7 +87,7 @@ public static IWebApiClientBuilder ConfigureHttpApi(this IWebApiClientBuilder bu
6487
}
6588

6689
/// <summary>
67-
/// 配置HttpApiOptions的默认值
90+
/// 配置<see cref="HttpApiOptions"/>的默认值
6891
/// </summary>
6992
/// <param name="builder"></param>
7093
/// <param name="configureOptions">配置选项</param>
@@ -76,7 +99,7 @@ public static IWebApiClientBuilder ConfigureHttpApi(this IWebApiClientBuilder bu
7699
}
77100

78101
/// <summary>
79-
/// 配置HttpApiOptions的默认值
102+
/// 配置<see cref="HttpApiOptions"/>的默认值
80103
/// </summary>
81104
/// <param name="builder"></param>
82105
/// <param name="configuration">配置</param>

WebApiClientCore/Implementations/DefaultHttpApiActivator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class DefaultHttpApiActivator<
1414
#endif
1515
THttpApi> : IHttpApiActivator<THttpApi>
1616
{
17-
private readonly Lazy<EmitHttpApiActivator<THttpApi>> emitHttpApiActivatorLazy;
17+
private readonly Lazy<ILEmitHttpApiActivator<THttpApi>> ilEmitHttpApiActivatorLazy;
1818
private readonly SourceGeneratorHttpApiActivator<THttpApi>? sourceGeneratorHttpApiActivator;
1919

2020
/// <summary>
@@ -30,7 +30,7 @@ public DefaultHttpApiActivator(IApiActionDescriptorProvider apiActionDescriptorP
3030
{
3131
this.sourceGeneratorHttpApiActivator = new SourceGeneratorHttpApiActivator<THttpApi>(apiActionDescriptorProvider, actionInvokerProvider);
3232
}
33-
this.emitHttpApiActivatorLazy = new Lazy<EmitHttpApiActivator<THttpApi>>(() => new EmitHttpApiActivator<THttpApi>(apiActionDescriptorProvider, actionInvokerProvider), isThreadSafe: true);
33+
this.ilEmitHttpApiActivatorLazy = new Lazy<ILEmitHttpApiActivator<THttpApi>>(() => new ILEmitHttpApiActivator<THttpApi>(apiActionDescriptorProvider, actionInvokerProvider), isThreadSafe: true);
3434
}
3535

3636
/// <summary>
@@ -41,7 +41,7 @@ public DefaultHttpApiActivator(IApiActionDescriptorProvider apiActionDescriptorP
4141
public THttpApi CreateInstance(IHttpApiInterceptor apiInterceptor)
4242
{
4343
return this.sourceGeneratorHttpApiActivator == null
44-
? this.emitHttpApiActivatorLazy.Value.CreateInstance(apiInterceptor)
44+
? this.ilEmitHttpApiActivatorLazy.Value.CreateInstance(apiInterceptor)
4545
: this.sourceGeneratorHttpApiActivator.CreateInstance(apiInterceptor);
4646
}
4747
}

WebApiClientCore/Implementations/EmitHttpApiActivator.cs renamed to WebApiClientCore/Implementations/ILEmitHttpApiActivator.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
namespace WebApiClientCore.Implementations
99
{
1010
/// <summary>
11-
/// 运行时使用Emit动态创建THttpApi的代理类和代理类实例
11+
/// 运行时使用ILEmit动态创建THttpApi的代理类和代理类实例
1212
/// </summary>
1313
/// <typeparam name="THttpApi"></typeparam>
14-
public class EmitHttpApiActivator<
14+
public class ILEmitHttpApiActivator<
1515
#if NET5_0_OR_GREATER
1616
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
1717
#endif
@@ -21,13 +21,13 @@ public class EmitHttpApiActivator<
2121
private readonly Func<IHttpApiInterceptor, ApiActionInvoker[], THttpApi> activator;
2222

2323
/// <summary>
24-
/// 运行时使用Emit动态创建THttpApi的代理类和代理类实例
24+
/// 运行时使用ILEmit动态创建THttpApi的代理类和代理类实例
2525
/// </summary>
2626
/// <param name="apiActionDescriptorProvider"></param>
2727
/// <param name="actionInvokerProvider"></param>
2828
/// <exception cref="ArgumentException"></exception>
2929
/// <exception cref="NotSupportedException"></exception>
30-
public EmitHttpApiActivator(IApiActionDescriptorProvider apiActionDescriptorProvider, IApiActionInvokerProvider actionInvokerProvider)
30+
public ILEmitHttpApiActivator(IApiActionDescriptorProvider apiActionDescriptorProvider, IApiActionInvokerProvider actionInvokerProvider)
3131
{
3232
var apiMethods = HttpApi.FindApiMethods(typeof(THttpApi));
3333

0 commit comments

Comments
 (0)