Skip to content

Commit 9f18ab6

Browse files
committed
👌 support custom resolver
1 parent 3660e0d commit 9f18ab6

File tree

9 files changed

+111
-19
lines changed

9 files changed

+111
-19
lines changed

build/releasenotes.props

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,13 +85,7 @@
8585
1. Support JsonSerializerSettings.
8686
</EasyCachingJsonPackageNotes>
8787
<EasyCachingMessagePackPackageNotes>
88-
1. Make Interceptors and response caching Support .netcore3.0.
89-
2. Remove WithServices method to support console apps.
90-
3. Improve RabbitMQ bus.
91-
4. Add deep clone for memory cache provider.
92-
5. Support multi instances of hybrid provider.
93-
6. Upgrading dependencies.
94-
7. Modify some extension methods' namespace.
88+
1. Support custom resolver.
9589
</EasyCachingMessagePackPackageNotes>
9690
<EasyCachingProtobufPackageNotes>
9791
1. Make Interceptors and response caching Support .netcore3.0.

build/version.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<EasyCachingCastlePackageVersion>0.8.0</EasyCachingCastlePackageVersion>
1111
<EasyCachingResponseCachingPackageVersion>0.8.0</EasyCachingResponseCachingPackageVersion>
1212
<EasyCachingJsonPackageVersion>0.8.1</EasyCachingJsonPackageVersion>
13-
<EasyCachingMessagePackPackageVersion>0.8.0</EasyCachingMessagePackPackageVersion>
13+
<EasyCachingMessagePackPackageVersion>0.8.1-bata</EasyCachingMessagePackPackageVersion>
1414
<EasyCachingProtobufPackageVersion>0.8.0</EasyCachingProtobufPackageVersion>
1515
<EasyCachingCSRedisPackageVersion>0.8.1</EasyCachingCSRedisPackageVersion>
1616
<EasyCachingRedisBusPackageVersion>0.8.0</EasyCachingRedisBusPackageVersion>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace EasyCaching.Serialization.MessagePack
2+
{
3+
/// <summary>
4+
/// EasyCachingMsgPackSerializerOptions
5+
/// </summary>
6+
public class EasyCachingMsgPackSerializerOptions
7+
{
8+
/// <summary>
9+
/// Whethe to enable custom resolver
10+
/// </summary>
11+
public bool EnableCustomResolver { get; set; }
12+
}
13+
}

src/EasyCaching.Serialization.MessagePack/Configurations/EasyCachingOptionsExtensions.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
using EasyCaching.Core.Configurations;
44
using EasyCaching.Serialization.MessagePack;
5+
using System;
56

67
/// <summary>
78
/// Easy caching options extensions.
@@ -15,7 +16,25 @@ public static class EasyCachingOptionsExtensions
1516
/// <param name="name">The name of this serializer instance.</param>
1617
public static EasyCachingOptions WithMessagePack(this EasyCachingOptions options, string name = "msgpack")
1718
{
18-
options.RegisterExtension(new MessagePackOptionsExtension(name));
19+
Action<EasyCachingMsgPackSerializerOptions> action = x =>
20+
{
21+
x.EnableCustomResolver = false;
22+
};
23+
24+
options.RegisterExtension(new MessagePackOptionsExtension(name, action));
25+
26+
return options;
27+
}
28+
29+
/// <summary>
30+
/// Withs the message pack serializer.
31+
/// </summary>
32+
/// <param name="options">Options.</param>
33+
/// <param name="action">Configure serializer settings.</param>
34+
/// <param name="name">The name of this serializer instance.</param>
35+
public static EasyCachingOptions WithMessagePack(this EasyCachingOptions options, Action<EasyCachingMsgPackSerializerOptions> action, string name)
36+
{
37+
options.RegisterExtension(new MessagePackOptionsExtension(name, action));
1938

2039
return options;
2140
}

src/EasyCaching.Serialization.MessagePack/Configurations/MessagePackOptionsExtension.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using EasyCaching.Core.Configurations;
44
using EasyCaching.Core.Serialization;
55
using Microsoft.Extensions.DependencyInjection;
6+
using System;
67

78
/// <summary>
89
/// Message pack options extension.
@@ -14,14 +15,21 @@ internal sealed class MessagePackOptionsExtension : IEasyCachingOptionsExtension
1415
/// </summary>
1516
private readonly string _name;
1617

18+
/// <summary>
19+
/// The configure.
20+
/// </summary>
21+
private readonly Action<EasyCachingMsgPackSerializerOptions> _configure;
22+
1723
/// <summary>
1824
/// Initializes a new instance of the
1925
/// <see cref="T:EasyCaching.Serialization.MessagePack.MessagePackOptionsExtension"/> class.
2026
/// </summary>
2127
/// <param name="name">Name.</param>
22-
public MessagePackOptionsExtension(string name)
28+
/// <param name="configure">Configure.</param>
29+
public MessagePackOptionsExtension(string name, Action<EasyCachingMsgPackSerializerOptions> configure)
2330
{
2431
this._name = name;
32+
this._configure = configure;
2533
}
2634

2735
/// <summary>
@@ -30,9 +38,17 @@ public MessagePackOptionsExtension(string name)
3038
/// <param name="services">Services.</param>
3139
public void AddServices(IServiceCollection services)
3240
{
41+
Action<EasyCachingMsgPackSerializerOptions> configure = x => { };
42+
43+
if (_configure != null) configure = _configure;
44+
45+
services.AddOptions();
46+
services.Configure(_name, configure);
3347
services.AddSingleton<IEasyCachingSerializer, DefaultMessagePackSerializer>(x =>
3448
{
35-
return new DefaultMessagePackSerializer(_name);
49+
var optionsMon = x.GetRequiredService<Microsoft.Extensions.Options.IOptionsMonitor<EasyCachingMsgPackSerializerOptions>>();
50+
var options = optionsMon.Get(_name);
51+
return new DefaultMessagePackSerializer(_name, options);
3652
});
3753
}
3854
}

src/EasyCaching.Serialization.MessagePack/DefaultMessagePackSerializer.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,16 @@ public class DefaultMessagePackSerializer : IEasyCachingSerializer
2020
/// <see cref="T:EasyCaching.Serialization.MessagePack.DefaultMessagePackSerializer"/> class.
2121
/// </summary>
2222
/// <param name="name">Name.</param>
23-
public DefaultMessagePackSerializer(string name)
23+
/// <param name="options">Options.</param>
24+
public DefaultMessagePackSerializer(string name, EasyCachingMsgPackSerializerOptions options)
2425
{
2526
_name = name;
26-
MessagePackSerializer.SetDefaultResolver(ContractlessStandardResolver.Instance);
27+
28+
if (!options.EnableCustomResolver)
29+
{
30+
MessagePackSerializer.SetDefaultResolver(ContractlessStandardResolver.Instance);
31+
}
32+
2733
}
2834

2935
/// <summary>
@@ -84,6 +90,5 @@ public object DeserializeObject(ArraySegment<byte> value)
8490
{
8591
return MessagePackSerializer.Deserialize<object>(value, TypelessContractlessStandardResolver.Instance);
8692
}
87-
8893
}
8994
}

src/EasyCaching.Serialization.MessagePack/EasyCaching.Serialization.MessagePack.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,4 @@
3636
<ItemGroup>
3737
<PackageReference Include="MessagePack" Version="1.7.3.7" />
3838
</ItemGroup>
39-
<ItemGroup>
40-
<Folder Include="Configurations\" />
41-
</ItemGroup>
4239
</Project>

test/EasyCaching.PerformanceTests/SerializerBenchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
public abstract class SerializerBenchmark
1717
{
1818
private DefaultJsonSerializer _json = new DefaultJsonSerializer("json", new JsonSerializerSettings());
19-
private DefaultMessagePackSerializer _messagepack = new DefaultMessagePackSerializer("msgpack");
19+
private DefaultMessagePackSerializer _messagepack = new DefaultMessagePackSerializer("msgpack", new EasyCachingMsgPackSerializerOptions { });
2020
private DefaultProtobufSerializer _protobuf = new DefaultProtobufSerializer("proto");
2121
private DefaultBinaryFormatterSerializer _binary = new DefaultBinaryFormatterSerializer();
2222
protected MyPoco _single;
Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,60 @@
11
namespace EasyCaching.UnitTests
22
{
33
using EasyCaching.Serialization.MessagePack;
4+
using MessagePack.Resolvers;
5+
using System;
6+
using Xunit;
47

58
public class MessagePackSerializerTest : BaseSerializerTest
69
{
710
public MessagePackSerializerTest()
811
{
9-
_serializer = new DefaultMessagePackSerializer("msgpack");
12+
_serializer = new DefaultMessagePackSerializer("msgpack", new EasyCachingMsgPackSerializerOptions { });
13+
}
14+
}
15+
16+
public class MessagePackSerializerTest2 //: BaseSerializerTest
17+
{
18+
DefaultMessagePackSerializer _serializer;
19+
20+
public MessagePackSerializerTest2()
21+
{
22+
CompositeResolver.RegisterAndSetAsDefault(
23+
// This can solve DateTime time zone problem
24+
NativeDateTimeResolver.Instance,
25+
ContractlessStandardResolver.Instance
26+
);
27+
28+
_serializer = new DefaultMessagePackSerializer("msgpack", new EasyCachingMsgPackSerializerOptions { EnableCustomResolver = true });
29+
}
30+
31+
[Fact]
32+
public void Issue_174_DateTime_Test()
33+
{
34+
var dt1 = DateTime.Parse("2019-11-07 10:30:30");
35+
36+
var s1 = _serializer.Serialize(new DT { Dt = dt1 });
37+
38+
Assert.NotEmpty(s1);
39+
40+
var res1 = _serializer.Deserialize<DT>(s1);
41+
42+
Assert.Equal(dt1, res1.Dt);
43+
44+
var dt = DateTime.Parse("2019-11-07 10:30:30").ToUniversalTime();
45+
46+
var s = _serializer.Serialize(new DT { Dt = dt });
47+
48+
Assert.NotEmpty(s);
49+
50+
var res = _serializer.Deserialize<DT>(s);
51+
52+
Assert.Equal(dt, res.Dt);
53+
}
54+
55+
public class DT
56+
{
57+
public DateTime Dt { get; set; }
1058
}
1159
}
1260
}

0 commit comments

Comments
 (0)