using System; namespace BingoBrain.Core { public class Singleton : ISingleton, IDisposable where T : Singleton, new() { private static T mInstance; private static readonly object LockObject = new(); public static T Instance { get { lock (LockObject) { mInstance ??= new T(); mInstance.OnSingletonInit(); } return mInstance; } } public virtual void Dispose() { mInstance = null; } public void OnSingletonInit() { } } }