using System; using System.Threading; namespace BetterGenshinImpact.Model; /// /// 由于 C# 的 DI 过于难用,bgi代码中依旧存在使用大量原始单例的对象 /// 给他们实现一个通用的单例模式 /// /// public class Singleton where T : class { protected static T? _instance; protected static object? syncRoot; public static T Instance => LazyInitializer.EnsureInitialized(ref _instance, ref syncRoot, CreateInstance); protected static T CreateInstance() { return (T)Activator.CreateInstance(typeof(T), true)!; } public static void DestroyInstance() { _instance = null; } }