Browse Source

Add AbpBsonSerializer utility class

pull/23673/head
maliming 5 months ago
parent
commit
3ead724a50
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 31
      framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs

31
framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/AbpBsonSerializer.cs

@ -0,0 +1,31 @@
using System;
using System.Collections.Concurrent;
using System.Reflection;
using MongoDB.Bson.Serialization;
namespace Volo.Abp.MongoDB;
public static class AbpBsonSerializer
{
private static readonly ConcurrentDictionary<Type, IBsonSerializer> Cache;
static AbpBsonSerializer()
{
var registry = BsonSerializer.SerializerRegistry;
var type = typeof(BsonSerializerRegistry);
var cacheField = type.GetField("_cache", BindingFlags.NonPublic | BindingFlags.Instance) ??
throw new AbpException($"Cannot find _cache field of {type.FullName}.");
Cache = (ConcurrentDictionary<Type, IBsonSerializer>)cacheField.GetValue(registry)!;
}
public static void RemoveSerializer<T>()
{
Cache.TryRemove(typeof(T), out _);
}
public static ConcurrentDictionary<Type, IBsonSerializer> GetSerializerCache()
{
return Cache;
}
}
Loading…
Cancel
Save