ServiceBehaviorElementCollection.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //------------------------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //------------------------------------------------------------------------------
  4. namespace System.ServiceModel.Configuration
  5. {
  6. using System.Collections;
  7. using System.Configuration;
  8. using System.Globalization;
  9. using System.ServiceModel.Description;
  10. using System.Collections.ObjectModel;
  11. using System.ServiceModel.Channels;
  12. using System.Collections.Generic;
  13. [ConfigurationCollection(typeof(ServiceBehaviorElement), AddItemName = ConfigurationStrings.Behavior)]
  14. public sealed class ServiceBehaviorElementCollection : ServiceModelEnhancedConfigurationElementCollection<ServiceBehaviorElement>
  15. {
  16. public ServiceBehaviorElementCollection()
  17. : base(ConfigurationStrings.Behavior)
  18. { }
  19. protected override bool ThrowOnDuplicate
  20. {
  21. get { return false; }
  22. }
  23. protected override void DeserializeElement(System.Xml.XmlReader reader, bool serializeCollectionKey)
  24. {
  25. base.DeserializeElement(reader, serializeCollectionKey);
  26. }
  27. protected override Object GetElementKey(ConfigurationElement element)
  28. {
  29. if (element == null)
  30. {
  31. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("element");
  32. }
  33. ServiceBehaviorElement configElementKey = (ServiceBehaviorElement)element;
  34. return configElementKey.Name;
  35. }
  36. protected override void BaseAdd(ConfigurationElement element)
  37. {
  38. if (null == element)
  39. {
  40. throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("element");
  41. }
  42. ServiceBehaviorElement childServiceBehaviorElement = element as ServiceBehaviorElement;
  43. string serviceBehaviorElementName = childServiceBehaviorElement.Name;
  44. ServiceBehaviorElement parentServiceBehaviorElement = this.BaseGet(serviceBehaviorElementName) as ServiceBehaviorElement;
  45. List<BehaviorExtensionElement> parentExtensionElements = new List<BehaviorExtensionElement>();
  46. if (parentServiceBehaviorElement != null)
  47. {
  48. foreach (BehaviorExtensionElement parentBehaviorElement in parentServiceBehaviorElement)
  49. {
  50. parentExtensionElements.Add(parentBehaviorElement);
  51. }
  52. }
  53. childServiceBehaviorElement.MergeWith(parentExtensionElements);
  54. base.BaseAdd(childServiceBehaviorElement);
  55. }
  56. }
  57. }