Skip to content

Commit a0d89ce

Browse files
committed
增加Aot兼容性适配
1 parent 58e4edf commit a0d89ce

File tree

55 files changed

+506
-123
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+506
-123
lines changed

WebApiClientCore.Abstractions/ApiActionDescriptor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Concurrent;
33
using System.Collections.Generic;
4+
using System.Diagnostics.CodeAnalysis;
45
using System.Reflection;
56

67
namespace WebApiClientCore
@@ -14,6 +15,9 @@ public abstract class ApiActionDescriptor
1415
/// 获取所在接口类型
1516
/// 这个值不一定是声明方法的接口类型
1617
/// </summary>
18+
#if NET5_0_OR_GREATER
19+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
20+
#endif
1721
public abstract Type InterfaceType { get; protected set; }
1822

1923
/// <summary>

WebApiClientCore.Abstractions/IApiActionDescriptorProvider.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Diagnostics.CodeAnalysis;
23
using System.Reflection;
34

45
namespace WebApiClientCore
@@ -13,6 +14,10 @@ public interface IApiActionDescriptorProvider
1314
/// </summary>
1415
/// <param name="method">接口的方法</param>
1516
/// <param name="interfaceType">接口类型</param>
16-
ApiActionDescriptor CreateActionDescriptor(MethodInfo method, Type interfaceType);
17+
ApiActionDescriptor CreateActionDescriptor(MethodInfo method,
18+
#if NET5_0_OR_GREATER
19+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
20+
#endif
21+
Type interfaceType);
1722
}
1823
}

WebApiClientCore.Abstractions/IHttpApiActivator.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
namespace WebApiClientCore
1+
using System.Diagnostics.CodeAnalysis;
2+
3+
namespace WebApiClientCore
24
{
35
/// <summary>
46
/// 定义THttpApi的实例创建器的接口
57
/// </summary>
68
/// <typeparam name="THttpApi"></typeparam>
79
public interface IHttpApiActivator<
810
#if NET5_0_OR_GREATER
9-
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
11+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
1012
#endif
1113
THttpApi>
1214
{

WebApiClientCore.Abstractions/Serialization/KeyValueSerializerOptions.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics;
4+
using System.Diagnostics.CodeAnalysis;
45
using System.Text.Encodings.Web;
56
using System.Text.Json;
67
using System.Text.Json.Serialization;
@@ -40,8 +41,13 @@ public JsonNamingPolicy? DictionaryKeyPolicy
4041
/// </summary>
4142
public bool IgnoreNullValues
4243
{
44+
#if NET5_0_OR_GREATER
45+
get => jsonOptions.DefaultIgnoreCondition == JsonIgnoreCondition.WhenWritingNull;
46+
set => jsonOptions.DefaultIgnoreCondition = value ? JsonIgnoreCondition.WhenWritingNull : JsonIgnoreCondition.Never;
47+
#else
4348
get => jsonOptions.IgnoreNullValues;
4449
set => jsonOptions.IgnoreNullValues = value;
50+
#endif
4551
}
4652

4753
/// <summary>
@@ -90,6 +96,10 @@ public KeyValueSerializerOptions()
9096
/// </summary>
9197
/// <param name="typeToConvert">目标类型</param>
9298
/// <returns></returns>
99+
#if NET8_0_OR_GREATER
100+
[RequiresDynamicCode("Getting a converter for a type may require reflection which depends on runtime code generation.")]
101+
[RequiresUnreferencedCode("Getting a converter for a type may require reflection which depends on unreferenced code.")]
102+
#endif
93103
public JsonConverter GetConverter(Type typeToConvert)
94104
{
95105
return this.jsonOptions.GetConverter(typeToConvert);

WebApiClientCore.Abstractions/WebApiClientCore.Abstractions.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<Nullable>enable</Nullable>
4+
<Nullable>enable</Nullable>
55
<TargetFrameworks>netstandard2.1;net5.0;net8.0</TargetFrameworks>
6+
<IsAotCompatible Condition="'$(TargetFramework)' == 'net8.0'">true</IsAotCompatible>
67

78
<RootNamespace>WebApiClientCore</RootNamespace>
89
<AssemblyName>WebApiClientCore.Abstractions</AssemblyName>

WebApiClientCore.Extensions.OAuths/DependencyInjection/TokenHandlerExtensions.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Diagnostics.CodeAnalysis;
23
using WebApiClientCore.Extensions.OAuths;
34
using WebApiClientCore.Extensions.OAuths.HttpMessageHandlers;
45

@@ -38,6 +39,9 @@ public static IHttpClientBuilder AddOAuthTokenHandler(this IHttpClientBuilder bu
3839
/// <param name="handlerFactory">hanlder的创建委托</param>
3940
/// <param name="tokenProviderSearchMode">token提供者的查找模式</param>
4041
/// <returns></returns>
42+
#if NET5_0_OR_GREATER
43+
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2072", Justification = "类型httpApiType明确是不会被裁剪的")]
44+
#endif
4145
public static IHttpClientBuilder AddOAuthTokenHandler<TOAuthTokenHandler>(this IHttpClientBuilder builder, Func<IServiceProvider, ITokenProvider, TOAuthTokenHandler> handlerFactory, TypeMatchMode tokenProviderSearchMode = TypeMatchMode.TypeOrBaseTypes)
4246
where TOAuthTokenHandler : OAuthTokenHandler
4347
{

WebApiClientCore.Extensions.OAuths/DependencyInjection/TokenProviderExtensions.GrantTypeClient.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.Extensions.Options;
22
using System;
3+
using System.Diagnostics.CodeAnalysis;
34
using WebApiClientCore.Extensions.OAuths.TokenProviders;
45

56
namespace Microsoft.Extensions.DependencyInjection
@@ -16,7 +17,11 @@ public static partial class TokenProviderExtensions
1617
/// <param name="services"></param>
1718
/// <param name="alias">TokenProvider的别名</param>
1819
/// <returns></returns>
19-
public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsTokenProvider<THttpApi>(this IServiceCollection services, string alias = "")
20+
public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsTokenProvider<
21+
#if NET5_0_OR_GREATER
22+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
23+
#endif
24+
THttpApi>(this IServiceCollection services, string alias = "")
2025
{
2126
var builder = services.AddTokenProvider<THttpApi, ClientCredentialsTokenProvider>(alias);
2227
return new OptionsBuilder<ClientCredentialsOptions>(builder.Services, builder.Name);
@@ -29,7 +34,11 @@ public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsToken
2934
/// <param name="services"></param>
3035
/// <param name="configureOptions">配置</param>
3136
/// <returns></returns>
32-
public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsTokenProvider<THttpApi>(this IServiceCollection services, Action<ClientCredentialsOptions> configureOptions)
37+
public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsTokenProvider<
38+
#if NET5_0_OR_GREATER
39+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
40+
#endif
41+
THttpApi>(this IServiceCollection services, Action<ClientCredentialsOptions> configureOptions)
3342
{
3443
return services.AddClientCredentialsTokenProvider<THttpApi>().Configure(configureOptions);
3544
}
@@ -42,7 +51,11 @@ public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsToken
4251
/// <param name="alias">TokenProvider的别名</param>
4352
/// <param name="configureOptions">配置</param>
4453
/// <returns></returns>
45-
public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsTokenProvider<THttpApi>(this IServiceCollection services, string alias, Action<ClientCredentialsOptions> configureOptions)
54+
public static OptionsBuilder<ClientCredentialsOptions> AddClientCredentialsTokenProvider<
55+
#if NET5_0_OR_GREATER
56+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
57+
#endif
58+
THttpApi>(this IServiceCollection services, string alias, Action<ClientCredentialsOptions> configureOptions)
4659
{
4760
return services.AddClientCredentialsTokenProvider<THttpApi>(alias).Configure(configureOptions);
4861
}

WebApiClientCore.Extensions.OAuths/DependencyInjection/TokenProviderExtensions.GrantTypePassword.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.Extensions.Options;
22
using System;
3+
using System.Diagnostics.CodeAnalysis;
34
using WebApiClientCore.Extensions.OAuths.TokenProviders;
45

56
namespace Microsoft.Extensions.DependencyInjection
@@ -16,7 +17,11 @@ public static partial class TokenProviderExtensions
1617
/// <param name="services"></param>
1718
/// <param name="alias">TokenProvider的别名</param>
1819
/// <returns></returns>
19-
public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsTokenProvider<THttpApi>(this IServiceCollection services, string alias = "")
20+
public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsTokenProvider<
21+
#if NET5_0_OR_GREATER
22+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
23+
#endif
24+
THttpApi>(this IServiceCollection services, string alias = "")
2025
{
2126
var builder = services.AddTokenProvider<THttpApi, PasswordCredentialsTokenProvider>(alias);
2227
return new OptionsBuilder<PasswordCredentialsOptions>(builder.Services, builder.Name);
@@ -29,7 +34,11 @@ public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsT
2934
/// <param name="services"></param>
3035
/// <param name="configureOptions">配置</param>
3136
/// <returns></returns>
32-
public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsTokenProvider<THttpApi>(this IServiceCollection services, Action<PasswordCredentialsOptions> configureOptions)
37+
public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsTokenProvider<
38+
#if NET5_0_OR_GREATER
39+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
40+
#endif
41+
THttpApi>(this IServiceCollection services, Action<PasswordCredentialsOptions> configureOptions)
3342
{
3443
return services.AddPasswordCredentialsTokenProvider<THttpApi>().Configure(configureOptions);
3544
}
@@ -42,7 +51,11 @@ public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsT
4251
/// <param name="alias">TokenProvider的别名</param>
4352
/// <param name="configureOptions">配置</param>
4453
/// <returns></returns>
45-
public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsTokenProvider<THttpApi>(this IServiceCollection services, string alias, Action<PasswordCredentialsOptions> configureOptions)
54+
public static OptionsBuilder<PasswordCredentialsOptions> AddPasswordCredentialsTokenProvider<
55+
#if NET5_0_OR_GREATER
56+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
57+
#endif
58+
THttpApi>(this IServiceCollection services, string alias, Action<PasswordCredentialsOptions> configureOptions)
4659
{
4760
return services.AddPasswordCredentialsTokenProvider<THttpApi>(alias).Configure(configureOptions);
4861
}

WebApiClientCore.Extensions.OAuths/DependencyInjection/TokenProviderExtensions.cs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Microsoft.Extensions.DependencyInjection.Extensions;
22
using System;
3+
using System.Diagnostics.CodeAnalysis;
34
using System.Threading.Tasks;
45
using WebApiClientCore;
56
using WebApiClientCore.Extensions.OAuths;
@@ -20,7 +21,11 @@ public static partial class TokenProviderExtensions
2021
/// <param name="tokenRequest">token请求委托</param>
2122
/// <param name="alias">TokenProvider的别名</param>
2223
/// <returns></returns>
23-
public static ITokenProviderBuilder AddTokenProvider<THttpApi>(this IServiceCollection services, Func<IServiceProvider, Task<TokenResult?>> tokenRequest, string alias = "")
24+
public static ITokenProviderBuilder AddTokenProvider<
25+
#if NET5_0_OR_GREATER
26+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
27+
#endif
28+
THttpApi>(this IServiceCollection services, Func<IServiceProvider, Task<TokenResult?>> tokenRequest, string alias = "")
2429
{
2530
return services.AddTokenProvider<THttpApi, DelegateTokenProvider>(s => new DelegateTokenProvider(s, tokenRequest), alias);
2631
}
@@ -36,11 +41,11 @@ public static ITokenProviderBuilder AddTokenProvider<THttpApi>(this IServiceColl
3641
/// <returns></returns>
3742
public static ITokenProviderBuilder AddTokenProvider<
3843
#if NET5_0_OR_GREATER
39-
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
44+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
4045
#endif
4146
THttpApi,
4247
#if NET5_0_OR_GREATER
43-
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
48+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
4449
#endif
4550
TTokenProvider>(this IServiceCollection services, Func<IServiceProvider, TTokenProvider> tokenProviderFactory, string alias = "")
4651
where TTokenProvider : class, ITokenProvider
@@ -62,11 +67,11 @@ public static ITokenProviderBuilder AddTokenProvider<
6267
/// <returns></returns>
6368
public static ITokenProviderBuilder AddTokenProvider<
6469
#if NET5_0_OR_GREATER
65-
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
70+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
6671
#endif
6772
THttpApi,
6873
#if NET5_0_OR_GREATER
69-
[System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
74+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
7075
#endif
7176
TTokenProvider>(this IServiceCollection services, string alias = "")
7277
where TTokenProvider : class, ITokenProvider
@@ -86,7 +91,15 @@ public static ITokenProviderBuilder AddTokenProvider<
8691
/// <param name="services"></param>
8792
/// <param name="alias">TokenProvider的别名</param>
8893
/// <returns></returns>
89-
private static ITokenProviderBuilder AddTokenProviderCore<THttpApi, TTokenProvider>(this IServiceCollection services, string alias)
94+
private static ITokenProviderBuilder AddTokenProviderCore<
95+
#if NET5_0_OR_GREATER
96+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
97+
#endif
98+
THttpApi,
99+
#if NET5_0_OR_GREATER
100+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
101+
#endif
102+
TTokenProvider>(this IServiceCollection services, string alias)
90103
where TTokenProvider : class, ITokenProvider
91104
{
92105
if (alias == null)

WebApiClientCore.Extensions.OAuths/ITokenProviderFactory.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Diagnostics.CodeAnalysis;
23

34
namespace WebApiClientCore.Extensions.OAuths
45
{
@@ -14,7 +15,11 @@ public interface ITokenProviderFactory
1415
/// <param name="typeMatchMode">类型匹配模式</param>
1516
/// <returns></returns>
1617
/// <exception cref="InvalidOperationException"></exception>
17-
ITokenProvider Create(Type httpApiType, TypeMatchMode typeMatchMode = TypeMatchMode.TypeOnly);
18+
ITokenProvider Create(
19+
#if NET5_0_OR_GREATER
20+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
21+
#endif
22+
Type httpApiType, TypeMatchMode typeMatchMode = TypeMatchMode.TypeOnly);
1823

1924
/// <summary>
2025
/// 通过接口类型获取或创建其对应的token提供者
@@ -24,6 +29,10 @@ public interface ITokenProviderFactory
2429
/// <param name="alias">TokenProvider的别名</param>
2530
/// <returns></returns>
2631
/// <exception cref="InvalidOperationException"></exception>
27-
ITokenProvider Create(Type httpApiType, TypeMatchMode typeMatchMode, string alias);
32+
ITokenProvider Create(
33+
#if NET5_0_OR_GREATER
34+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]
35+
#endif
36+
Type httpApiType, TypeMatchMode typeMatchMode, string alias);
2837
}
2938
}

0 commit comments

Comments
 (0)