Skip to content

Commit 68dd48a

Browse files
authored
Merge pull request dotnetcore#263 from dotnetcore/dev
v1.1.0
2 parents 9914b86 + db73e8f commit 68dd48a

File tree

48 files changed

+1387
-560
lines changed

Some content is hidden

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

48 files changed

+1387
-560
lines changed

EasyCaching.sln

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "bus", "bus", "{B337509B-75F
6868
EndProject
6969
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyCaching.LiteDB", "src\EasyCaching.LiteDB\EasyCaching.LiteDB.csproj", "{BA850294-3103-4540-8A27-FC768E1DC8FC}"
7070
EndProject
71+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyCaching.Serialization.SystemTextJson", "serialization\EasyCaching.Serialization.SystemTextJson\EasyCaching.Serialization.SystemTextJson.csproj", "{4FCF16BF-5E21-4B74-AB45-3C121ADF1485}"
72+
EndProject
7173
Global
7274
GlobalSection(SolutionConfigurationPlatforms) = preSolution
7375
Debug|Any CPU = Debug|Any CPU
@@ -178,6 +180,10 @@ Global
178180
{BA850294-3103-4540-8A27-FC768E1DC8FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
179181
{BA850294-3103-4540-8A27-FC768E1DC8FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
180182
{BA850294-3103-4540-8A27-FC768E1DC8FC}.Release|Any CPU.Build.0 = Release|Any CPU
183+
{4FCF16BF-5E21-4B74-AB45-3C121ADF1485}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
184+
{4FCF16BF-5E21-4B74-AB45-3C121ADF1485}.Debug|Any CPU.Build.0 = Debug|Any CPU
185+
{4FCF16BF-5E21-4B74-AB45-3C121ADF1485}.Release|Any CPU.ActiveCfg = Release|Any CPU
186+
{4FCF16BF-5E21-4B74-AB45-3C121ADF1485}.Release|Any CPU.Build.0 = Release|Any CPU
181187
EndGlobalSection
182188
GlobalSection(SolutionProperties) = preSolution
183189
HideSolutionNode = FALSE
@@ -209,6 +215,7 @@ Global
209215
{43AD80E9-696B-4042-9D50-B26F48BE1928} = {A0F5CC7E-155F-4726-8DEB-E966950B3FE9}
210216
{711603E1-8363-4F8D-9AA9-8C03EC8BD35F} = {B4241D34-A973-4A13-BD89-9BAE3F2BDDF6}
211217
{BA850294-3103-4540-8A27-FC768E1DC8FC} = {A0F5CC7E-155F-4726-8DEB-E966950B3FE9}
218+
{4FCF16BF-5E21-4B74-AB45-3C121ADF1485} = {15070C49-A507-4844-BCFE-D319CFBC9A63}
212219
EndGlobalSection
213220
GlobalSection(ExtensibilityGlobals) = postSolution
214221
SolutionGuid = {63A57886-054B-476C-AAE1-8D7C8917682E}

build/releasenotes.props

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<Project>
22
<PropertyGroup>
33
<EasyCachingCorePackageNotes>
4-
1. IRedisProvider support search keys.
5-
2. DefaultEasyCachingKeyGenerator support GenerateCacheKeyForModel.
4+
1. Allow to cache null value.
5+
2. Ready for 1.x version.
66
</EasyCachingCorePackageNotes>
77
<EasyCachingMemcachedPackageNotes>
88
1. Upgrading dependencies.
99
</EasyCachingMemcachedPackageNotes>
1010
<EasyCachingRedisPackageNotes>
11-
1. IRedisProvider support search keys.
11+
1. Upgrading dependencies.
1212
</EasyCachingRedisPackageNotes>
1313
<EasyCachingSQLitePackageNotes>
1414
1. Upgrading dependencies.
@@ -38,7 +38,7 @@
3838
1. Upgrading dependencies.
3939
</EasyCachingProtobufPackageNotes>
4040
<EasyCachingCSRedisPackageNotes>
41-
1. IRedisProvider support search keys.
41+
1. Upgrading dependencies.
4242
</EasyCachingCSRedisPackageNotes>
4343
<EasyCachingCSRedisBusPackageNotes>
4444
1. Upgrading dependencies.
@@ -53,7 +53,10 @@
5353
1. Upgrading dependencies.
5454
</EasyCachingDiskPackageNotes>
5555
<EasyCachingLiteDBPackageNotes>
56-
1. LiteDB joined for the first time.
56+
1. Upgrading dependencies.
5757
</EasyCachingLiteDBPackageNotes>
58+
<EasyCachingSTJsonPackageNotes>
59+
1. Init.
60+
</EasyCachingSTJsonPackageNotes>
5861
</PropertyGroup>
5962
</Project>

build/version.props

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
<Project>
22
<PropertyGroup>
3-
<EasyCachingCorePackageVersion>0.9.0</EasyCachingCorePackageVersion>
4-
<EasyCachingMemcachedPackageVersion>0.9.0</EasyCachingMemcachedPackageVersion>
5-
<EasyCachingRedisPackageVersion>0.9.0</EasyCachingRedisPackageVersion>
6-
<EasyCachingSQLitePackageVersion>0.9.0</EasyCachingSQLitePackageVersion>
7-
<EasyCachingInMemoryPackageVersion>0.9.0</EasyCachingInMemoryPackageVersion>
8-
<EasyCachingHybridPackageVersion>0.9.0</EasyCachingHybridPackageVersion>
9-
<EasyCachingAspectCorePackageVersion>0.9.0</EasyCachingAspectCorePackageVersion>
10-
<EasyCachingCastlePackageVersion>0.9.0</EasyCachingCastlePackageVersion>
11-
<EasyCachingResponseCachingPackageVersion>0.9.0</EasyCachingResponseCachingPackageVersion>
12-
<EasyCachingJsonPackageVersion>0.9.0</EasyCachingJsonPackageVersion>
13-
<EasyCachingMessagePackPackageVersion>0.9.0</EasyCachingMessagePackPackageVersion>
14-
<EasyCachingProtobufPackageVersion>0.9.0</EasyCachingProtobufPackageVersion>
15-
<EasyCachingCSRedisPackageVersion>0.9.0</EasyCachingCSRedisPackageVersion>
16-
<EasyCachingRedisBusPackageVersion>0.9.0</EasyCachingRedisBusPackageVersion>
17-
<EasyCachingCSRedisBusPackageVersion>0.9.0</EasyCachingCSRedisBusPackageVersion>
18-
<EasyCachingRabbitBusPackageVersion>0.9.0</EasyCachingRabbitBusPackageVersion>
19-
<EasyCachingDiskPackageVersion>0.9.0</EasyCachingDiskPackageVersion>
20-
<EasyCachingMsExtPackageVersion>0.9.0</EasyCachingMsExtPackageVersion>
21-
<EasyCachingLiteDBPackageVersion>0.9.0</EasyCachingLiteDBPackageVersion>
3+
<EasyCachingCorePackageVersion>1.1.0</EasyCachingCorePackageVersion>
4+
<EasyCachingMemcachedPackageVersion>1.1.0</EasyCachingMemcachedPackageVersion>
5+
<EasyCachingRedisPackageVersion>1.1.0</EasyCachingRedisPackageVersion>
6+
<EasyCachingSQLitePackageVersion>1.1.0</EasyCachingSQLitePackageVersion>
7+
<EasyCachingInMemoryPackageVersion>1.1.0</EasyCachingInMemoryPackageVersion>
8+
<EasyCachingHybridPackageVersion>1.1.0</EasyCachingHybridPackageVersion>
9+
<EasyCachingAspectCorePackageVersion>1.1.0</EasyCachingAspectCorePackageVersion>
10+
<EasyCachingCastlePackageVersion>1.1.0</EasyCachingCastlePackageVersion>
11+
<EasyCachingResponseCachingPackageVersion>1.1.0</EasyCachingResponseCachingPackageVersion>
12+
<EasyCachingJsonPackageVersion>1.1.0</EasyCachingJsonPackageVersion>
13+
<EasyCachingMessagePackPackageVersion>1.1.0</EasyCachingMessagePackPackageVersion>
14+
<EasyCachingProtobufPackageVersion>1.1.0</EasyCachingProtobufPackageVersion>
15+
<EasyCachingCSRedisPackageVersion>1.1.0</EasyCachingCSRedisPackageVersion>
16+
<EasyCachingRedisBusPackageVersion>1.1.0</EasyCachingRedisBusPackageVersion>
17+
<EasyCachingCSRedisBusPackageVersion>1.1.0</EasyCachingCSRedisBusPackageVersion>
18+
<EasyCachingRabbitBusPackageVersion>1.1.0</EasyCachingRabbitBusPackageVersion>
19+
<EasyCachingDiskPackageVersion>1.1.0</EasyCachingDiskPackageVersion>
20+
<EasyCachingMsExtPackageVersion>1.1.0</EasyCachingMsExtPackageVersion>
21+
<EasyCachingLiteDBPackageVersion>1.1.0</EasyCachingLiteDBPackageVersion>
22+
<EasyCachingSTJsonPackageVersion>1.1.0</EasyCachingSTJsonPackageVersion>
2223
</PropertyGroup>
2324
</Project>

sample/EasyCaching.Demo.Interceptors/Controllers/ValuesController.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public string Aspectcore(int type = 1)
3838
var res = _aService.GetDemo(111);
3939
return $"{res.Id}-{res.Name}-{res.CreateTime}";
4040
}
41+
else if (type == 5)
42+
{
43+
var res = _aService.GetData();
44+
return Newtonsoft.Json.JsonConvert.SerializeObject(res);
45+
}
4146
else
4247
{
4348
return "wait";

sample/EasyCaching.Demo.Interceptors/Services/IAspectCoreService.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public interface IAspectCoreService //: EasyCaching.Core.Internal.IEasyCaching
2727

2828
[EasyCachingAble(Expiration = 10)]
2929
Demo GetDemo(int id);
30+
31+
[EasyCachingAble(Expiration = 10)]
32+
object GetData();
3033
}
3134

3235
public class AspectCoreService : IAspectCoreService
@@ -71,6 +74,10 @@ public string PutSomething(string str)
7174
return str;
7275
}
7376

77+
public object GetData()
78+
{
79+
return new { x = System.DateTimeOffset.Now.ToUnixTimeSeconds() };
80+
}
7481
}
7582

7683
[ProtoContract]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text.Encodings.Web;
4+
using System.Text.Json;
5+
using System.Text.Json.Serialization;
6+
7+
namespace EasyCaching.Serialization.SystemTextJson.Configurations
8+
{
9+
public class EasyCachingJsonSerializerOptions
10+
{
11+
/// <summary>
12+
/// Gets or sets the encoder to use when escaping strings, or null to use the default
13+
/// encoder.
14+
/// </summary>
15+
public JavaScriptEncoder Encoder => JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
16+
/// <summary>
17+
/// Gets or sets a value that defines how comments are handled during deserialization.
18+
/// </summary>
19+
public JsonCommentHandling ReadCommentHandling => JsonCommentHandling.Disallow;
20+
/// <summary>
21+
/// Gets or sets a value that specifies the policy used to convert a property's name
22+
/// on an object to another format, such as camel-casing, or null to leave property
23+
/// names unchanged.
24+
/// </summary>
25+
public JsonNamingPolicy PropertyNamingPolicy => null;
26+
/// <summary>
27+
/// Gets or sets a value that determines whether a property's name uses a case-insensitive
28+
/// comparison during deserialization. The default value is false.
29+
/// </summary>
30+
public bool PropertyNameCaseInsensitive => false;
31+
/// <summary>
32+
/// Specifies how number types should be handled when serializing or deserializing.
33+
/// </summary>
34+
public JsonNumberHandling NumberHandling => JsonNumberHandling.Strict;
35+
/// <summary>
36+
/// Gets or sets the maximum depth allowed when serializing or deserializing JSON,
37+
/// with the default value of 0 indicating a maximum depth of 64.
38+
/// </summary>
39+
public int MaxDepth => 0;
40+
/// <summary>
41+
/// Determines whether fields are handled serialization and deserialization. The
42+
/// default value is false.
43+
/// </summary>
44+
public bool IncludeFields => false;
45+
/// <summary>
46+
/// Gets a value that determines whether read-only properties are ignored during
47+
/// serialization. The default value is false.
48+
/// </summary>
49+
public bool IgnoreReadOnlyProperties => false;
50+
/// <summary>
51+
/// Determines whether read-only fields are ignored during serialization. A property
52+
/// is read-only if it isn't marked with the readonly keyword. The default value is false.
53+
/// </summary>
54+
public bool IgnoreReadOnlyFields => false;
55+
/// <summary>
56+
/// Gets or sets a value that determines whether null values are ignored during serialization
57+
/// and deserialization. The default value is false.
58+
/// </summary>
59+
public bool IgnoreNullValues = false;
60+
/// <summary>
61+
/// Gets or sets the policy used to convert a System.Collections.IDictionary key's
62+
/// name to another format, such as camel-casing.
63+
/// </summary>
64+
public JsonNamingPolicy DictionaryKeyPolicy => null;
65+
/// <summary>
66+
/// Specifies a condition to determine when properties with default values are ignored
67+
/// during serialization or deserialization. The default value is System.Text.Json.Serialization.JsonIgnoreCondition.Never.
68+
/// </summary>
69+
public JsonIgnoreCondition DefaultIgnoreCondition => JsonIgnoreCondition.Never;
70+
/// <summary>
71+
/// Gets or sets the default buffer size, in bytes, to use when creating temporary buffers.
72+
/// </summary>
73+
public int DefaultBufferSize => 16 * 1024;
74+
/// <summary>
75+
/// Gets the list of user-defined converters that were registered.
76+
/// </summary>
77+
public IList<JsonConverter> Converters => new List<JsonConverter>();
78+
/// <summary>
79+
/// Get or sets a value that indicates whether an extra comma at the end of a list
80+
/// of JSON values in an object or array is allowed (and ignored) within the JSON
81+
/// payload being deserialized.
82+
/// </summary>
83+
public bool AllowTrailingCommas => false;
84+
/// <summary>
85+
/// Configures how object references are handled when reading and writing JSON.
86+
/// </summary>
87+
public ReferenceHandler ReferenceHandler => null;
88+
/// <summary>
89+
/// Gets or sets a value that defines whether JSON should use pretty printing. By
90+
/// default, JSON is serialized without any extra white space.
91+
/// </summary>
92+
public bool WriteIndented => false;
93+
}
94+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using EasyCaching.Core.Configurations;
2+
using System;
3+
using System.Linq;
4+
using System.Text.Json;
5+
6+
namespace EasyCaching.Serialization.SystemTextJson.Configurations
7+
{
8+
9+
/// <summary>
10+
/// EasyCaching options extensions.
11+
/// </summary>
12+
public static class EasyCachingOptionsExtensions
13+
{
14+
/// <summary>
15+
/// Withs the json serializer.
16+
/// </summary>
17+
/// <param name="options">Options.</param>
18+
/// <param name="name">The name of this serializer instance.</param>
19+
public static EasyCachingOptions WithSystemTextJson(this EasyCachingOptions options, string name = "json") => options.WithSystemTextJson(configure: x => { }, name);
20+
21+
/// <summary>
22+
/// Withs the json serializer.
23+
/// </summary>
24+
/// <param name="options">Options.</param>
25+
/// <param name="configure">Configure serializer settings.</param>
26+
/// <param name="name">The name of this serializer instance.</param>
27+
public static EasyCachingOptions WithSystemTextJson(this EasyCachingOptions options, Action<EasyCachingJsonSerializerOptions> configure, string name)
28+
{
29+
var easyCachingJsonSerializerOptions = new EasyCachingJsonSerializerOptions();
30+
31+
configure(easyCachingJsonSerializerOptions);
32+
33+
void jsonSerializerSettings(JsonSerializerOptions x)
34+
{
35+
x.MaxDepth = easyCachingJsonSerializerOptions.MaxDepth;
36+
x.AllowTrailingCommas = easyCachingJsonSerializerOptions.AllowTrailingCommas;
37+
x.Converters.Union(easyCachingJsonSerializerOptions.Converters);
38+
x.DefaultBufferSize = easyCachingJsonSerializerOptions.DefaultBufferSize;
39+
x.DefaultIgnoreCondition = easyCachingJsonSerializerOptions.DefaultIgnoreCondition;
40+
x.DictionaryKeyPolicy = easyCachingJsonSerializerOptions.DictionaryKeyPolicy;
41+
x.Encoder = easyCachingJsonSerializerOptions.Encoder;
42+
x.IgnoreReadOnlyFields = easyCachingJsonSerializerOptions.IgnoreReadOnlyFields;
43+
x.IgnoreReadOnlyProperties = easyCachingJsonSerializerOptions.IgnoreReadOnlyProperties;
44+
x.IncludeFields = easyCachingJsonSerializerOptions.IncludeFields;
45+
x.NumberHandling = easyCachingJsonSerializerOptions.NumberHandling;
46+
x.PropertyNameCaseInsensitive = easyCachingJsonSerializerOptions.PropertyNameCaseInsensitive;
47+
x.PropertyNamingPolicy = easyCachingJsonSerializerOptions.PropertyNamingPolicy;
48+
x.ReadCommentHandling = easyCachingJsonSerializerOptions.ReadCommentHandling;
49+
x.ReferenceHandler = easyCachingJsonSerializerOptions.ReferenceHandler;
50+
x.WriteIndented = easyCachingJsonSerializerOptions.WriteIndented;
51+
}
52+
53+
options.RegisterExtension(new JsonOptionsExtension(name, jsonSerializerSettings));
54+
55+
return options;
56+
}
57+
58+
/// <summary>
59+
/// Withs the json serializer.
60+
/// </summary>
61+
/// <param name="options">Options.</param>
62+
/// <param name="jsonSerializerSettingsConfigure">Configure serializer settings.</param>
63+
/// <param name="name">The name of this serializer instance.</param>
64+
public static EasyCachingOptions WithSystemTextJson(this EasyCachingOptions options, Action<JsonSerializerOptions> jsonSerializerSettingsConfigure, string name)
65+
{
66+
options.RegisterExtension(new JsonOptionsExtension(name, jsonSerializerSettingsConfigure));
67+
68+
return options;
69+
}
70+
}
71+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
using EasyCaching.Core.Configurations;
2+
using EasyCaching.Core.Serialization;
3+
using Microsoft.Extensions.DependencyInjection;
4+
using System;
5+
using System.Text.Json;
6+
7+
namespace EasyCaching.Serialization.SystemTextJson
8+
{
9+
/// <summary>
10+
/// Json options extension.
11+
/// </summary>
12+
internal sealed class JsonOptionsExtension : IEasyCachingOptionsExtension
13+
{
14+
/// <summary>
15+
/// The name.
16+
/// </summary>
17+
private readonly string _name;
18+
19+
/// <summary>
20+
/// The configure.
21+
/// </summary>
22+
private readonly Action<JsonSerializerOptions> _configure;
23+
24+
/// <summary>
25+
/// Initializes a new instance of the <see cref="T:EasyCaching.Serialization.SystemTextJson.JsonOptionsExtension"/> class.
26+
/// </summary>
27+
/// <param name="name">Name.</param>
28+
/// <param name="configure">Configure.</param>
29+
public JsonOptionsExtension(string name, Action<JsonSerializerOptions> configure)
30+
{
31+
_name = name;
32+
_configure = configure;
33+
}
34+
35+
public void AddServices(IServiceCollection services)
36+
{
37+
Action<JsonSerializerOptions> configure = x => { };
38+
39+
if (_configure != null) configure = _configure;
40+
41+
services.AddOptions();
42+
services.Configure(_name, configure);
43+
services.AddSingleton<IEasyCachingSerializer, DefaultJsonSerializer>(x =>
44+
{
45+
var optionsMon = x.GetRequiredService<Microsoft.Extensions.Options.IOptionsMonitor<JsonSerializerOptions>>();
46+
var options = optionsMon.Get(_name);
47+
return new DefaultJsonSerializer(_name, options);
48+
});
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)