using System; using System.Reflection; using SUISS.Core.Utilities; namespace SUISSEngine { public abstract class Singleton where T : Singleton, new() { public Singleton() { } public static T Instance { get { if (Singleton._instance == null) { try { Singleton._instance = Activator.CreateInstance(); } catch (TargetInvocationException ex) { throw new Exception("Exception in initializer: " + typeof(T).GetCompatibleTypeInfo().FullName + "\n" + ex.InnerException.ToString()); } } return Singleton._instance; } } public static bool IsAvailable { get { return Singleton._instance != null; } } private static T _instance; } }