using System; using System.Reflection; namespace MiniCafe.Util { /**////<summary> /// this is the base class for singleton mode in csharp. Derived class must have a /// privae or protected constructor without any parameters, otherwise exception will /// be throwed. ///</summary> ///<typeparam name="T"></typeparam> publicclass Singleton<T> where T : class { privatestatic T instance; /**////<summary> /// instace property of class T ///</summary> publicstatic T Instance { get { if (instance ==null) { lock (typeof(T)) { if (instance ==null) { ConstructorInfo constructor =typeof(T).GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new Type[0], new ParameterModifier[0]); if (constructor ==null) thrownew Exception("The object that you want to singleton doesnt have a private/protected constructor so the property cannot be enforced."); try { instance = constructor.Invoke(newobject[0]) as T; } catch (Exception e) { thrownew Exception("The Singleton couldnt be constructed, check if the type T has a default constructor", e); } } } } return instance; } } } }