using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Configuration; namespace SuperSocket.SocketBase.Config { /// <summary> /// Type provider colletion configuration /// </summary> [ConfigurationCollection(typeof(TypeProvider))] public class TypeProviderCollection : ConfigurationElementCollection, IEnumerable<ITypeProvider> { /// <summary> /// When overridden in a derived class, creates a new <see cref="T:System.Configuration.ConfigurationElement"/>. /// </summary> /// <returns> /// A new <see cref="T:System.Configuration.ConfigurationElement"/>. /// </returns> protected override ConfigurationElement CreateNewElement() { return new TypeProvider() as ConfigurationElement; } /// <summary> /// Gets the element key for a specified configuration element when overridden in a derived class. /// </summary> /// <param name="element">The <see cref="T:System.Configuration.ConfigurationElement"/> to return the key for.</param> /// <returns> /// An <see cref="T:System.Object"/> that acts as the key for the specified <see cref="T:System.Configuration.ConfigurationElement"/>. /// </returns> protected override object GetElementKey(ConfigurationElement element) { var provider = element as TypeProvider; if (provider == null) return null; return provider.Name; } /// <summary> /// Returns an enumerator that iterates through the collection. /// </summary> /// <returns> /// A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection. /// </returns> public new IEnumerator<ITypeProvider> GetEnumerator() { int count = base.Count; for (int i = 0; i < count; i++) { yield return (ITypeProvider)base.BaseGet(i); } } } }