From 04b17e8a63937c7765dba82d4a46db7537135cab Mon Sep 17 00:00:00 2001
From: Mohammad Javad Ebrahimi <mj.ebrahimi72@gmail.com>
Date: Wed, 18 Sep 2024 05:05:57 +0330
Subject: [PATCH] Bugfix #537 issue and Correct namespace and StringEncoding
 default value (#538)

---
 .../EasyCachingMemPackSerializerOptions.cs    | 10 +++++---
 .../EasyCachingOptionsExtensions.cs           | 13 +++++------
 .../MemoryPackOptionsExtension.cs             | 23 +++++++++++--------
 3 files changed, 26 insertions(+), 20 deletions(-)

diff --git a/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingMemPackSerializerOptions.cs b/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingMemPackSerializerOptions.cs
index 033aa04d..e7748658 100644
--- a/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingMemPackSerializerOptions.cs
+++ b/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingMemPackSerializerOptions.cs
@@ -7,7 +7,11 @@ namespace EasyCaching.Serialization.MemoryPack;
 /// </summary>
 public record EasyCachingMemPackSerializerOptions
 {
-    public StringEncoding StringEncoding { set; get; }
+    /// <summary>
+    /// Gets or sets the string encoding. (Defaults to <see cref="StringEncoding.Utf8"/>)
+    /// </summary>
+    /// <value>
+    /// The string encoding.
+    /// </value>
+    public StringEncoding StringEncoding { set; get; } = StringEncoding.Utf8;
 }
-
-
diff --git a/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingOptionsExtensions.cs b/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingOptionsExtensions.cs
index 0585d747..2373b277 100644
--- a/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingOptionsExtensions.cs
+++ b/serialization/EasyCaching.Serialization.MemoryPack/Configurations/EasyCachingOptionsExtensions.cs
@@ -1,8 +1,7 @@
-using MemoryPack;
-using EasyCaching.Core.Configurations;
-using EasyCaching.Serialization.Json;
+using EasyCaching.Core.Configurations;
+using EasyCaching.Serialization.MemoryPack;
 
-namespace EasyCaching.Serialization.MemoryPack;
+namespace Microsoft.Extensions.DependencyInjection;
 
 /// <summary>
 /// Easy caching options extensions.
@@ -13,7 +12,7 @@ public static class EasyCachingOptionsExtensions
     /// Withs the memory pack serializer.
     /// </summary>
     /// <param name="options">Options.</param>
-    /// <param name="name">The name of this serializer instance.</param>        
+    /// <param name="name">The name of this serializer instance.</param>
     public static EasyCachingOptions WithMemoryPack(this EasyCachingOptions options, string name = "mempack")
     {
         options.RegisterExtension(new MemoryPackOptionsExtension(name, null));
@@ -23,10 +22,10 @@ public static EasyCachingOptions WithMemoryPack(this EasyCachingOptions options,
 
     /// <summary>
     /// Withs the memory pack serializer.
-    /// </summary>        
+    /// </summary>
     /// <param name="options">Options.</param>
     /// <param name="serializerOptions">Configure serializer settings.</param>
-    /// <param name="name">The name of this serializer instance.</param>     
+    /// <param name="name">The name of this serializer instance.</param>
     public static EasyCachingOptions WithMemoryPack(this EasyCachingOptions options, Action<EasyCachingMemPackSerializerOptions> serializerOptions, string name)
     {
         options.RegisterExtension(new MemoryPackOptionsExtension(name, serializerOptions));
diff --git a/serialization/EasyCaching.Serialization.MemoryPack/Configurations/MemoryPackOptionsExtension.cs b/serialization/EasyCaching.Serialization.MemoryPack/Configurations/MemoryPackOptionsExtension.cs
index 58126711..d0983f1a 100644
--- a/serialization/EasyCaching.Serialization.MemoryPack/Configurations/MemoryPackOptionsExtension.cs
+++ b/serialization/EasyCaching.Serialization.MemoryPack/Configurations/MemoryPackOptionsExtension.cs
@@ -1,12 +1,10 @@
-namespace EasyCaching.Serialization.Json;
-
-using System;
 using EasyCaching.Core.Configurations;
 using EasyCaching.Core.Serialization;
-using EasyCaching.Serialization.MemoryPack;
-using global::MemoryPack;
+using MemoryPack;
 using Microsoft.Extensions.DependencyInjection;
 
+namespace EasyCaching.Serialization.MemoryPack;
+
 /// <summary>
 /// MemoryPack options extension.
 /// </summary>
@@ -29,8 +27,8 @@ internal sealed class MemoryPackOptionsExtension : IEasyCachingOptionsExtension
     /// <param name="configure">Configure.</param>
     public MemoryPackOptionsExtension(string name, Action<EasyCachingMemPackSerializerOptions> configure)
     {
-        this._name = name;
-        this._configure = configure;
+        _name = name;
+        _configure = configure;
     }
 
     /// <summary>
@@ -44,11 +42,16 @@ public void AddServices(IServiceCollection services)
         services.AddOptions();
         services.Configure(_name, configure);
 
-        services.AddSingleton<IEasyCachingSerializer, DefaultMemoryPackSerializer>(x =>
+        services.AddSingleton<IEasyCachingSerializer, DefaultMemoryPackSerializer>(services =>
         {
-            var optionsMon = x.GetRequiredService<Microsoft.Extensions.Options.IOptionsMonitor<EasyCachingMemPackSerializerOptions>>();
+            var optionsMon = services.GetRequiredService<Microsoft.Extensions.Options.IOptionsMonitor<EasyCachingMemPackSerializerOptions>>();
             var easyCachingOptions = optionsMon.Get(_name);
-            var options = new MemoryPackSerializerOptions { StringEncoding = easyCachingOptions.StringEncoding };
+
+            var options = MemoryPackSerializerOptions.Default;
+            typeof(MemoryPackSerializerOptions)
+                .GetProperty(nameof(MemoryPackSerializerOptions.StringEncoding))
+                .SetValue(options, easyCachingOptions.StringEncoding);
+
             return new DefaultMemoryPackSerializer(_name, options);
         });
     }