Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Sys / System / Configuration / DictionarySectionHandler.cs / 1 / DictionarySectionHandler.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Configuration {
using System.Collections;
using System.Collections.Specialized;
using System.Xml;
using System.Globalization;
///
/// Simple dictionary config factory
/// config is a dictionary mapping key->value
///
/// <add key="name" value="text"> sets key=text
/// <remove key="name"> removes the definition of key
/// <clear> removes all definitions
///
///
public class DictionarySectionHandler : IConfigurationSectionHandler {
///
/// Given a partially composed config object (possibly null)
/// and some input from the config system, return a
/// further partially composed config object
///
public virtual object Create(Object parent, Object context, XmlNode section) {
Hashtable res;
// start res off as a shallow clone of the parent
if (parent == null)
res = new Hashtable(StringComparer.OrdinalIgnoreCase);
else
res = (Hashtable)((Hashtable)parent).Clone();
// process XML
HandlerBase.CheckForUnrecognizedAttributes(section);
foreach (XmlNode child in section.ChildNodes) {
// skip whitespace and comments, throws if non-element
if (HandlerBase.IsIgnorableAlsoCheckForNonElement(child))
continue;
// handle , , tags
if (child.Name == "add") {
HandlerBase.CheckForChildNodes(child);
String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
String value;
if (ValueRequired)
value = HandlerBase.RemoveRequiredAttribute(child, ValueAttributeName);
else
value = HandlerBase.RemoveAttribute(child, ValueAttributeName);
HandlerBase.CheckForUnrecognizedAttributes(child);
if (value == null)
value = "";
res[key] = value;
}
else if (child.Name == "remove") {
HandlerBase.CheckForChildNodes(child);
String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
HandlerBase.CheckForUnrecognizedAttributes(child);
res.Remove(key);
}
else if (child.Name.Equals("clear")) {
HandlerBase.CheckForChildNodes(child);
HandlerBase.CheckForUnrecognizedAttributes(child);
res.Clear();
}
else {
HandlerBase.ThrowUnrecognizedElement(child);
}
}
return res;
}
///
/// Make the name of the key attribute configurable by derived classes.
///
protected virtual string KeyAttributeName {
get { return "key";}
}
///
/// Make the name of the value attribute configurable by derived classes.
///
protected virtual string ValueAttributeName {
get { return "value";}
}
//
internal virtual bool ValueRequired {
get { return false; }
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Configuration {
using System.Collections;
using System.Collections.Specialized;
using System.Xml;
using System.Globalization;
///
/// Simple dictionary config factory
/// config is a dictionary mapping key->value
///
/// <add key="name" value="text"> sets key=text
/// <remove key="name"> removes the definition of key
/// <clear> removes all definitions
///
///
public class DictionarySectionHandler : IConfigurationSectionHandler {
///
/// Given a partially composed config object (possibly null)
/// and some input from the config system, return a
/// further partially composed config object
///
public virtual object Create(Object parent, Object context, XmlNode section) {
Hashtable res;
// start res off as a shallow clone of the parent
if (parent == null)
res = new Hashtable(StringComparer.OrdinalIgnoreCase);
else
res = (Hashtable)((Hashtable)parent).Clone();
// process XML
HandlerBase.CheckForUnrecognizedAttributes(section);
foreach (XmlNode child in section.ChildNodes) {
// skip whitespace and comments, throws if non-element
if (HandlerBase.IsIgnorableAlsoCheckForNonElement(child))
continue;
// handle , , tags
if (child.Name == "add") {
HandlerBase.CheckForChildNodes(child);
String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
String value;
if (ValueRequired)
value = HandlerBase.RemoveRequiredAttribute(child, ValueAttributeName);
else
value = HandlerBase.RemoveAttribute(child, ValueAttributeName);
HandlerBase.CheckForUnrecognizedAttributes(child);
if (value == null)
value = "";
res[key] = value;
}
else if (child.Name == "remove") {
HandlerBase.CheckForChildNodes(child);
String key = HandlerBase.RemoveRequiredAttribute(child, KeyAttributeName);
HandlerBase.CheckForUnrecognizedAttributes(child);
res.Remove(key);
}
else if (child.Name.Equals("clear")) {
HandlerBase.CheckForChildNodes(child);
HandlerBase.CheckForUnrecognizedAttributes(child);
res.Clear();
}
else {
HandlerBase.ThrowUnrecognizedElement(child);
}
}
return res;
}
///
/// Make the name of the key attribute configurable by derived classes.
///
protected virtual string KeyAttributeName {
get { return "key";}
}
///
/// Make the name of the value attribute configurable by derived classes.
///
protected virtual string ValueAttributeName {
get { return "value";}
}
//
internal virtual bool ValueRequired {
get { return false; }
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PasswordPropertyTextAttribute.cs
- NavigationProperty.cs
- MemberDescriptor.cs
- XamlStream.cs
- SqlError.cs
- IgnorePropertiesAttribute.cs
- ProtocolInformationWriter.cs
- PackWebRequestFactory.cs
- ColumnResizeUndoUnit.cs
- DrawTreeNodeEventArgs.cs
- FirstQueryOperator.cs
- PointAnimationBase.cs
- ConsumerConnectionPointCollection.cs
- CuspData.cs
- ClientApiGenerator.cs
- DropShadowEffect.cs
- DeviceSpecific.cs
- ReflectionPermission.cs
- RoutedUICommand.cs
- SqlTypeConverter.cs
- GridSplitter.cs
- PhonemeConverter.cs
- basecomparevalidator.cs
- ThicknessConverter.cs
- RangeBase.cs
- XmlDataContract.cs
- IntSecurity.cs
- Stacktrace.cs
- PersonalizationState.cs
- IndependentAnimationStorage.cs
- Publisher.cs
- ProgramNode.cs
- ProgressBar.cs
- HttpCachePolicyElement.cs
- RuntimeCompatibilityAttribute.cs
- GridView.cs
- DataGridPagingPage.cs
- ColorTransformHelper.cs
- ClientRolePrincipal.cs
- SessionStateModule.cs
- DesignBindingConverter.cs
- ThreadSafeList.cs
- EnumerableCollectionView.cs
- HttpModuleAction.cs
- ZipIOLocalFileDataDescriptor.cs
- CodeGenerator.cs
- StickyNoteHelper.cs
- SequenceDesignerAccessibleObject.cs
- SafeCertificateContext.cs
- ContentValidator.cs
- CombinedGeometry.cs
- RangeEnumerable.cs
- IntellisenseTextBox.designer.cs
- XmlSchemaComplexType.cs
- TextMarkerSource.cs
- CustomError.cs
- ExtensibleClassFactory.cs
- IdentityHolder.cs
- InfoCardService.cs
- OptimalBreakSession.cs
- Button.cs
- TypefaceCollection.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- NavigationHelper.cs
- NonClientArea.cs
- ServiceChannelManager.cs
- AutomationEvent.cs
- XmlCompatibilityReader.cs
- TemplateInstanceAttribute.cs
- SinglePhaseEnlistment.cs
- ResXResourceSet.cs
- InvalidProgramException.cs
- BinaryMessageEncodingBindingElement.cs
- GridViewRowEventArgs.cs
- XmlWriterSettings.cs
- MSAANativeProvider.cs
- SQLInt64.cs
- PackageRelationship.cs
- ImageAutomationPeer.cs
- ThreadStaticAttribute.cs
- EncodingDataItem.cs
- TypeDependencyAttribute.cs
- WindowsNonControl.cs
- EndEvent.cs
- ProxyWebPartManager.cs
- XmlRootAttribute.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- TraceUtility.cs
- DataGridViewUtilities.cs
- ExpanderAutomationPeer.cs
- ComponentChangedEvent.cs
- TypeForwardedToAttribute.cs
- clipboard.cs
- ChannelPoolSettingsElement.cs
- MatrixConverter.cs
- XmlComplianceUtil.cs
- XslCompiledTransform.cs
- CodeDomComponentSerializationService.cs
- BrowserCapabilitiesFactory.cs
- WebEvents.cs