aboutsummaryrefslogtreecommitdiff
path: root/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs')
-rw-r--r--plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs49
1 files changed, 38 insertions, 11 deletions
diff --git a/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs b/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs
index c337ef4..dc1ab8f 100644
--- a/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs
+++ b/plugins/VNLib.Data.Caching.Providers.VNCache/src/VNCacheBase.cs
@@ -25,26 +25,22 @@
using System.Threading;
using System.Threading.Tasks;
+using VNLib.Plugins;
+using VNLib.Plugins.Extensions.Loading;
+
namespace VNLib.Data.Caching.Providers.VNCache
{
- internal abstract class VNCacheBase : IGlobalCacheProvider
+ internal abstract class VNCacheBase(VNCacheConfig conf) : IGlobalCacheProvider
{
///<inheritdoc/>
public abstract bool IsConnected { get; }
///<inheritdoc/>
- public virtual ICacheObjectDeserializer DefaultDeserializer { get; }
+ public virtual ICacheObjectDeserializer DefaultDeserializer => conf.CacheObjectDeserializer!;
///<inheritdoc/>
- public virtual ICacheObjectSerializer DefaultSerializer { get; }
-
- protected VNCacheBase(VNCacheConfig config)
- {
- //Set default serializers
- DefaultDeserializer = config.CacheObjectDeserializer ?? new JsonCacheObjectSerializer(256);
- DefaultSerializer = config.CacheObjectSerializer ?? new JsonCacheObjectSerializer(256);
- }
-
+ public virtual ICacheObjectSerializer DefaultSerializer => conf.CacheObjectSerializer!;
+
///<inheritdoc/>
public abstract Task AddOrUpdateAsync<T>(string key, string? newKey, T value, ICacheObjectSerializer serialzer, CancellationToken cancellation);
@@ -62,5 +58,36 @@ namespace VNLib.Data.Caching.Providers.VNCache
///<inheritdoc/>
public abstract object GetUnderlyingStore();
+
+ /// <summary>
+ /// Initializes a set of cache object serializers and deserializers
+ /// for the configuration instance and loads external serializers if specified
+ /// by the user.
+ /// </summary>
+ /// <param name="config">The configuration instance to initialzie</param>
+ /// <param name="plugin">Optional plugin for loading external serializers</param>
+ protected static void InitSerializers(VNCacheConfig config, PluginBase? plugin)
+ {
+ //See if user has specified a custom serializer assembly
+ if (!string.IsNullOrWhiteSpace(config.SerializerDllPath))
+ {
+ //Load the custom serializer assembly and get the serializer and deserializer instances
+ config.CacheObjectSerializer = plugin.CreateServiceExternal<ICacheObjectSerializer>(config.SerializerDllPath);
+
+ //Avoid creating another instance if the deserializer is the same as the serializer
+ if(config.CacheObjectSerializer is ICacheObjectDeserializer cod)
+ {
+ config.CacheObjectDeserializer = cod;
+ }
+ else
+ {
+ config.CacheObjectDeserializer = plugin.CreateServiceExternal<ICacheObjectDeserializer>(config.SerializerDllPath);
+ }
+ }
+
+ //If no default serializer is set, use the default JSON serializer
+ config.CacheObjectSerializer ??= new JsonCacheObjectSerializer(256);
+ config.CacheObjectDeserializer ??= new JsonCacheObjectSerializer(256);
+ }
}
} \ No newline at end of file