NopCommerce(EBuy模拟)中Singleton单例的设计——泛型学习

来源:互联网 发布:linux中dump命令 编辑:程序博客网 时间:2024/05/22 06:46
 /// <summary>    /// Provides access to all "singletons" stored by <see cref="Singleton{T}"/>.    /// Singleton中包含一个键为类型,值为该类型的实例的一个Dictionary    /// </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; }        }    }
/// <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.    /// Singleton<T>中包含一个T的实例,并存入类实例字典中    /// </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.    /// SingletonList<T>中包含一个Singleton<IList<T>>实例    /// </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.    /// SingletonDictionary<TKey, TValue>中包含一个Singleton<Dictionary<TKey, TValue>>实例    /// </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; }        }    }

0 0
原创粉丝点击