NopCommerce中的单例模式类
using System; using System.Collections.Generic; namespace Nop.Core.Infrastructure { /// <summary> /// A statically compiled "singleton" used to store objects throughout the /// lifetime of the app domain. Not so much singleton in the pattern's /// sense of the word as a standardized way to store single instances. /// </summary> /// <typeparam name="T">The type of object to store.</typeparam> /// <remarks>Access to the instance is not synchrnoized.</remarks> public class Singleton<T> : Singleton { static T instance; /// <summary>The singleton instance for the specified type T. Only one instance (at the time) of this object for each type of T.</summary> public static T Instance { get { return instance; } set { instance = value; AllSingletons[typeof(T)] = value; } } } /// <summary> /// Provides a singleton list for a certain type. /// </summary> /// <typeparam name="T">The type of list to store.</typeparam> public class SingletonList<T> : Singleton<IList<T>> { static SingletonList() { Singleton<IList<T>>.Instance = new List<T>(); } /// <summary>The singleton instance for the specified type T. Only one instance (at the time) of this list for each type of T.</summary> public new static IList<T> Instance { get { return Singleton<IList<T>>.Instance; } } } /// <summary> /// Provides a singleton dictionary for a certain key and vlaue type. /// </summary> /// <typeparam name="TKey">The type of key.</typeparam> /// <typeparam name="TValue">The type of value.</typeparam> public class SingletonDictionary<TKey, TValue> : Singleton<IDictionary<TKey, TValue>> { static SingletonDictionary() { Singleton<Dictionary<TKey, TValue>>.Instance = new Dictionary<TKey, TValue>(); } /// <summary>The singleton instance for the specified type T. Only one instance (at the time) of this dictionary for each type of T.</summary> public new static IDictionary<TKey, TValue> Instance { get { return Singleton<Dictionary<TKey, TValue>>.Instance; } } } /// <summary> /// Provides access to all "singletons" stored by <see cref="Singleton{T}"/>. /// </summary> public class Singleton { static Singleton() { allSingletons = new Dictionary<Type, object>(); } static readonly IDictionary<Type, object> allSingletons; /// <summary>Dictionary of type to singleton instances.</summary> public static IDictionary<Type, object> AllSingletons { get { return allSingletons; } } } }