Skip to content

Commit 57c838b

Browse files
committed
非nfx下使用Microsoft.Extensions.Caching.Memory
1 parent 8c0a49f commit 57c838b

File tree

5 files changed

+80
-7
lines changed

5 files changed

+80
-7
lines changed

WebApiClient.Test/Internal/ResponseCacheProviderTest.cs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#if !NETSTANDARD1_3
22
using System;
33
using System.Threading.Tasks;
4+
using WebApiClient.Defaults;
45
using Xunit;
56

67
namespace WebApiClient.Test.Internal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#if !NET45 && !NET46
2+
3+
using Microsoft.Extensions.Caching.Memory;
4+
using Microsoft.Extensions.Options;
5+
using System;
6+
using System.Threading.Tasks;
7+
8+
namespace WebApiClient.Defaults
9+
{
10+
/// <summary>
11+
/// 表示Api响应结果缓存提供者的接口
12+
/// </summary>
13+
public class ResponseCacheProvider : Disposable, IResponseCacheProvider
14+
{
15+
/// <summary>
16+
/// 默认实例
17+
/// </summary>
18+
public static readonly ResponseCacheProvider Instance = new ResponseCacheProvider();
19+
20+
/// <summary>
21+
/// 内存缓存
22+
/// </summary>
23+
private readonly MemoryCache cache = new MemoryCache(Options.Create(new MemoryCacheOptions()));
24+
25+
/// <summary>
26+
/// 获取提供者的友好名称
27+
/// </summary>
28+
public string Name { get; } = nameof(MemoryCache);
29+
30+
/// <summary>
31+
/// 从缓存中获取响应实体
32+
/// </summary>
33+
/// <param name="key">键</param>
34+
/// <returns></returns>
35+
public Task<ResponseCacheResult> GetAsync(string key)
36+
{
37+
if (this.cache.TryGetValue(key, out var value) == false)
38+
{
39+
var result = ResponseCacheResult.NoValue;
40+
return Task.FromResult(result);
41+
}
42+
else
43+
{
44+
var val = value as ResponseCacheEntry;
45+
var result = new ResponseCacheResult(val, true);
46+
return Task.FromResult(result);
47+
}
48+
}
49+
50+
/// <summary>
51+
/// 设置响应实体到缓存
52+
/// </summary>
53+
/// <param name="key">键</param>
54+
/// <param name="entry">缓存实体</param>
55+
/// <param name="expiration">有效时间</param>
56+
/// <returns></returns>
57+
public Task SetAsync(string key, ResponseCacheEntry entry, TimeSpan expiration)
58+
{
59+
this.cache.Set(key, entry, DateTimeOffset.Now.Add(expiration));
60+
return ApiTask.CompletedTask;
61+
}
62+
63+
/// <summary>
64+
/// 释放资源
65+
/// </summary>
66+
/// <param name="disposing">是否也释放托管资源</param>
67+
protected override void Dispose(bool disposing)
68+
{
69+
this.cache.Dispose();
70+
}
71+
}
72+
}
73+
#endif

WebApiClient/Internal/ResponseCacheProvider.cs renamed to WebApiClient/Defaults/ResponseCacheProvider.nfx.cs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
#if !NETSTANDARD1_3
1+
#if NET45 || NET46
2+
23
using System;
34
using System.Runtime.Caching;
45
using System.Threading.Tasks;
56

6-
namespace WebApiClient
7+
namespace WebApiClient.Defaults
78
{
89
/// <summary>
910
/// 表示Api响应结果缓存提供者的接口
1011
/// </summary>
11-
class ResponseCacheProvider : Disposable, IResponseCacheProvider
12+
public class ResponseCacheProvider : Disposable, IResponseCacheProvider
1213
{
1314
/// <summary>
1415
/// 默认实例

WebApiClient/HttpApiConfig.cs

+2-4
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,8 @@ public class HttpApiConfig : Disposable
8181
/// <summary>
8282
/// 获取或设置Api的缓存提供者
8383
/// </summary>
84-
public IResponseCacheProvider ResponseCacheProvider { get; set; }
85-
#if !NETSTANDARD1_3
86-
= WebApiClient.ResponseCacheProvider.Instance;
87-
#endif
84+
public IResponseCacheProvider ResponseCacheProvider { get; set; } = Defaults.ResponseCacheProvider.Instance;
85+
8886

8987
/// <summary>
9088
/// 获取或设置服务提供者

WebApiClient/WebApiClient.csproj

234 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)