namespace GMap.NET { using System; using System.Diagnostics; using System.Reflection; /// /// generic for singletons /// /// public class Singleton where T : new() { // ctor protected Singleton() { if(Instance != null) { throw (new Exception("You have tried to create a new singleton class where you should have instanced it. Replace your \"new class()\" with \"class.Instance\"")); } } public static T Instance { get { if(SingletonCreator.exception != null) { throw SingletonCreator.exception; } return SingletonCreator.instance; } } class SingletonCreator { static SingletonCreator() { try { instance = new T(); } catch(Exception ex) { if(ex.InnerException != null) { exception = ex.InnerException; } else { exception = ex; } Trace.WriteLine("Singleton: " + exception); } } internal static readonly T instance; internal static readonly Exception exception; } } }