11using MessagePack ;
22using MessagePack . Resolvers ;
3+ using Microsoft . Extensions . Options ;
34
45namespace EFCoreSecondLevelCacheInterceptor ;
56
@@ -16,14 +17,31 @@ public class EFMessagePackSerializer : IEFDataSerializer
1617 DynamicGenericResolver . Instance
1718 ] ) ;
1819
20+ private readonly bool _enableCompression ;
21+ private MessagePackSerializerOptions ? _messagePackSerializerOptions ;
22+
23+ /// <summary>
24+ /// High-Level API of MessagePack for C#.
25+ /// </summary>
26+ public EFMessagePackSerializer ( IOptions < EFCoreSecondLevelCacheSettings > cacheSettings )
27+ {
28+ var options = cacheSettings . Value . AdditionalData as EFRedisCacheConfigurationOptions ??
29+ throw new InvalidOperationException (
30+ message : "Please call the UseStackExchangeRedisCacheProvider() method." ) ;
31+
32+ _enableCompression = options . EnableCompression ;
33+ }
34+
35+ private MessagePackSerializerOptions MessagePackSerializerOptions
36+ => _messagePackSerializerOptions ??= GetSerializerOptions ( ) ;
37+
1938 /// <summary>
2039 /// Serializes a given value with the specified buffer writer.
2140 /// </summary>
2241 /// <param name="obj"></param>
2342 /// <typeparam name="T"></typeparam>
2443 /// <returns></returns>
25- public byte [ ] Serialize < T > ( T ? obj )
26- => MessagePackSerializer . Serialize ( obj , MessagePackSerializerOptions . Standard . WithResolver ( CustomResolvers ) ) ;
44+ public byte [ ] Serialize < T > ( T ? obj ) => MessagePackSerializer . Serialize ( obj , MessagePackSerializerOptions ) ;
2745
2846 /// <summary>
2947 /// Deserializes a value of a given type from a sequence of bytes.
@@ -32,8 +50,11 @@ public byte[] Serialize<T>(T? obj)
3250 /// <typeparam name="T"></typeparam>
3351 /// <returns></returns>
3452 public T ? Deserialize < T > ( byte [ ] ? data )
35- => data is null
36- ? default
37- : MessagePackSerializer . Deserialize < T > ( data ,
38- MessagePackSerializerOptions . Standard . WithResolver ( CustomResolvers ) ) ;
53+ => data is null ? default : MessagePackSerializer . Deserialize < T > ( data , MessagePackSerializerOptions ) ;
54+
55+ private MessagePackSerializerOptions GetSerializerOptions ( )
56+ => _enableCompression
57+ ? MessagePackSerializerOptions . Standard . WithCompression ( MessagePackCompression . Lz4BlockArray )
58+ . WithResolver ( CustomResolvers )
59+ : MessagePackSerializerOptions . Standard . WithResolver ( CustomResolvers ) ;
3960}
0 commit comments