Просмотр исходного кода

还是去掉了MongoSingleton,主要Mongo bson注册的数据不太好清理,反而重新注册比较简单。
还是放到MongoRegister Init方法中重新注册一下比较简单

tanghai 2 лет назад
Родитель
Сommit
536c76a050

+ 3 - 1
Share/Tool/Init.cs

@@ -25,7 +25,9 @@ namespace ET.Server
                 
                 World.Instance.AddSingleton<CodeTypes, Assembly[]>(new[] { typeof (Init).Assembly });
                 World.Instance.AddSingleton<EventSystem>();
-                World.Instance.AddSingleton<MongoSingleton>();
+                
+                // 强制调用一下mongo,避免mongo库被裁剪
+                MongoHelper.ToJson(1);
                 
                 ETTask.ExceptionHandler += Log.Error;
                 

+ 4 - 1
Unity/Assets/Scripts/Core/Serialize/MongoHelper.cs

@@ -9,13 +9,16 @@ namespace ET
 {
     public static class MongoHelper
     {
+        [StaticField]
+        private static readonly JsonWriterSettings defaultSettings = new() { OutputMode = JsonOutputMode.RelaxedExtendedJson };
+        
         public static string ToJson(object obj)
         {
             if (obj is ISupportInitialize supportInitialize)
             {
                 supportInitialize.BeginInit();
             }
-            return obj.ToJson(MongoSingleton.Instance.DefaultSettings);
+            return obj.ToJson(defaultSettings);
         }
 
         public static string ToJson(object obj, JsonWriterSettings settings)

+ 0 - 19
Unity/Assets/Scripts/Core/Serialize/MongoSingleton.cs

@@ -1,19 +0,0 @@
-using MongoDB.Bson.IO;
-
-namespace ET
-{
-    public class MongoSingleton: Singleton<MongoSingleton>, ISingletonAwake
-    {
-        [StaticField]
-        public readonly JsonWriterSettings DefaultSettings = new() { OutputMode = JsonOutputMode.RelaxedExtendedJson };
-        
-        public void Awake()
-        {
-        }
-
-        protected override void Destroy()
-        {
-            // 清理注册的Mongo元数据
-        }
-    }
-}

+ 0 - 11
Unity/Assets/Scripts/Core/Serialize/MongoSingleton.cs.meta

@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 9218aea5952c98549898b8f8f305c328
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 

+ 2 - 3
Unity/Assets/Scripts/Model/Share/Entry.cs

@@ -30,9 +30,8 @@ namespace ET
         {
             WinPeriod.Init();
 
-            World.Instance.AddSingleton<MongoSingleton>();
-            // 注册Mongo type,mongo驱动是放在static字段中,假如需要清理,可以在MongoSingleton Destroy中清理
-            MongoRegister.Register();
+            // 注册Mongo type
+            MongoRegister.Init();
 
             World.Instance.AddSingleton<IdGenerater>();
             World.Instance.AddSingleton<OpcodeType>();

+ 9 - 1
Unity/Assets/Scripts/Model/Share/MongoRegister.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using System.Reflection;
 using MongoDB.Bson.Serialization;
 using MongoDB.Bson.Serialization.Conventions;
 using TrueSync;
@@ -14,8 +15,15 @@ namespace ET
             BsonSerializer.RegisterSerializer(typeof (T), new StructBsonSerialize<T>());
         }
         
-        public static void Register()
+        public static void Init()
         {
+            // 清理老的数据
+            MethodInfo createSerializerRegistry = typeof (BsonSerializer).GetMethod("CreateSerializerRegistry", BindingFlags.Static | BindingFlags.NonPublic);
+            createSerializerRegistry.Invoke(null, Array.Empty<object>());
+            MethodInfo registerIdGenerators = typeof (BsonSerializer).GetMethod("RegisterIdGenerators", BindingFlags.Static | BindingFlags.NonPublic);
+            registerIdGenerators.Invoke(null, Array.Empty<object>());
+            
+            
             // 自动注册IgnoreExtraElements
             ConventionPack conventionPack = new() { new IgnoreExtraElementsConvention(true) };