//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ namespace System.Xaml.Hosting.Configuration { using System; using System.Configuration; using System.Collections.Generic; using System.Web; using System.Runtime; [ConfigurationCollection(typeof(HandlerElement), CollectionType = ConfigurationElementCollectionType.AddRemoveClearMapAlternate)] public sealed class HandlerElementCollection : ConfigurationElementCollection { public HandlerElementCollection() : base(StringComparer.OrdinalIgnoreCase) { } public override ConfigurationElementCollectionType CollectionType { get { return ConfigurationElementCollectionType.AddRemoveClearMapAlternate; } } protected override bool ThrowOnDuplicate { get { return false; } } public HandlerElement this[int index] { get { return (HandlerElement)base.BaseGet(index); } set { if (base.BaseGet(index) != null) { base.BaseRemoveAt(index); } this.BaseAdd(index, value); } } public void Add(HandlerElement handlerElement) { if (!this.IsReadOnly()) { if (handlerElement == null) { throw FxTrace.Exception.ArgumentNull("handlerElement"); } } this.BaseAdd(handlerElement, false); } public void Clear() { base.BaseClear(); } public void Remove(HandlerElement handlerElement) { if (!this.IsReadOnly()) { if (handlerElement == null) { throw FxTrace.Exception.ArgumentNull("handlerElement"); } } this.BaseRemove(this.GetElementKey(handlerElement)); } public void Remove(string xamlRootElementType) { if (!this.IsReadOnly()) { if (xamlRootElementType == null) { throw FxTrace.Exception.ArgumentNull("xamlRootElementType"); } } this.BaseRemove(xamlRootElementType); } public void RemoveAt(int index) { base.BaseRemoveAt(index); } internal bool TryGetHttpHandlerType(Type hostedXamlType, out Type httpHandlerType) { httpHandlerType = null; foreach (HandlerElement handler in this) { if (handler.LoadXamlRootElementType().IsAssignableFrom(hostedXamlType)) { httpHandlerType = handler.LoadHttpHandlerType(); return true; } } return false; } protected override ConfigurationElement CreateNewElement() { return new HandlerElement(); } protected override object GetElementKey(ConfigurationElement element) { if (element == null) { throw FxTrace.Exception.ArgumentNull("element"); } return ((HandlerElement)element).Key; } } }