Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Sys / System / Configuration / SettingsBase.cs / 1 / SettingsBase.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Configuration { using System.Collections.Specialized; using System.Runtime.Serialization; using System.Configuration.Provider; using System.Collections; using System.ComponentModel; //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// public abstract class SettingsBase { protected SettingsBase() { _PropertyValues = new SettingsPropertyValueCollection(); } //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// public virtual object this[string propertyName] { get { if (IsSynchronized) { lock (this) { return GetPropertyValueByName(propertyName); } } else { return GetPropertyValueByName(propertyName); } } set { if (IsSynchronized) { lock (this) { SetPropertyValueByName(propertyName, value); } } else { SetPropertyValueByName(propertyName, value); } } } private object GetPropertyValueByName(string propertyName) { if (Properties == null || _PropertyValues == null || Properties.Count == 0) throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); SettingsProperty pp = Properties[propertyName]; if (pp == null) throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); SettingsPropertyValue p = _PropertyValues[propertyName]; if (p == null) { GetPropertiesFromProvider(pp.Provider); p = _PropertyValues[propertyName]; if (p == null) throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); } return p.PropertyValue; } private void SetPropertyValueByName(string propertyName, object propertyValue) { if (Properties == null || _PropertyValues == null || Properties.Count == 0) throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); SettingsProperty pp = Properties[propertyName]; if (pp == null) throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); if (pp.IsReadOnly) throw new SettingsPropertyIsReadOnlyException(SR.GetString(SR.SettingsPropertyReadOnly, propertyName)); if (propertyValue != null && !pp.PropertyType.IsInstanceOfType(propertyValue)) throw new SettingsPropertyWrongTypeException(SR.GetString(SR.SettingsPropertyWrongType, propertyName)); SettingsPropertyValue p = _PropertyValues[propertyName]; if (p == null) { GetPropertiesFromProvider(pp.Provider); p = _PropertyValues[propertyName]; if (p == null) throw new SettingsPropertyNotFoundException(SR.GetString(SR.SettingsPropertyNotFound, propertyName)); } p.PropertyValue = propertyValue; } //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// public void Initialize( SettingsContext context, SettingsPropertyCollection properties, SettingsProviderCollection providers) { _Context = context; _Properties = properties; _Providers = providers; } //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// public virtual void Save() { if (IsSynchronized) { lock (this) { SaveCore(); } } else { SaveCore(); } } private void SaveCore() { if (Properties == null || _PropertyValues == null || Properties.Count == 0) return; foreach(SettingsProvider prov in Providers) { SettingsPropertyValueCollection ppcv = new SettingsPropertyValueCollection(); foreach (SettingsPropertyValue pp in PropertyValues) { if (pp.Property.Provider == prov) { ppcv.Add(pp); } } if (ppcv.Count > 0) { prov.SetPropertyValues(Context, ppcv); } } foreach (SettingsPropertyValue pp in PropertyValues) pp.IsDirty = false; } virtual public SettingsPropertyCollection Properties { get { return _Properties; }} virtual public SettingsProviderCollection Providers { get { return _Providers; }} virtual public SettingsPropertyValueCollection PropertyValues { get { return _PropertyValues; } } virtual public SettingsContext Context { get { return _Context; } } private void GetPropertiesFromProvider(SettingsProvider provider) { SettingsPropertyCollection ppc = new SettingsPropertyCollection(); foreach (SettingsProperty pp in Properties) { if (pp.Provider == provider) { ppc.Add(pp); } } if (ppc.Count > 0) { SettingsPropertyValueCollection ppcv = provider.GetPropertyValues(Context, ppc); foreach (SettingsPropertyValue p in ppcv) { if (_PropertyValues[p.Name] == null) _PropertyValues.Add(p); } } } public static SettingsBase Synchronized(SettingsBase settingsBase) { settingsBase._IsSynchronized = true; return settingsBase; } //////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// private SettingsPropertyCollection _Properties = null; private SettingsProviderCollection _Providers = null; private SettingsPropertyValueCollection _PropertyValues = null; private SettingsContext _Context = null; private bool _IsSynchronized = false; [Browsable(false)] public bool IsSynchronized { get { return _IsSynchronized; } } } }
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- NumberFormatInfo.cs
- Package.cs
- InputLanguageManager.cs
- FlowDocumentScrollViewer.cs
- SystemGatewayIPAddressInformation.cs
- ToolboxItemCollection.cs
- UnsafeNativeMethods.cs
- PersonalizationProviderHelper.cs
- Peer.cs
- ToolStripContainer.cs
- IsolatedStorageFilePermission.cs
- ResourceDisplayNameAttribute.cs
- DateTimeFormatInfoScanner.cs
- SQLInt32.cs
- XomlSerializationHelpers.cs
- AnimationException.cs
- ByteAnimationBase.cs
- ListViewPagedDataSource.cs
- XmlReflectionMember.cs
- MarginCollapsingState.cs
- KeyPullup.cs
- SqlParameterCollection.cs
- TypographyProperties.cs
- Misc.cs
- DocumentOrderQuery.cs
- connectionpool.cs
- PathNode.cs
- WebPartRestoreVerb.cs
- WebBrowser.cs
- SpotLight.cs
- CellTreeNode.cs
- UnknownMessageReceivedEventArgs.cs
- WCFBuildProvider.cs
- CodePropertyReferenceExpression.cs
- BoundsDrawingContextWalker.cs
- ZipIOBlockManager.cs
- SynchronizationValidator.cs
- TableLayoutStyle.cs
- ListControl.cs
- SmiMetaDataProperty.cs
- XmlBindingWorker.cs
- COM2PropertyDescriptor.cs
- WebPartCloseVerb.cs
- BuildManagerHost.cs
- Panel.cs
- XmlAttributeOverrides.cs
- Rotation3DAnimation.cs
- WSMessageEncoding.cs
- XmlNullResolver.cs
- RealizationContext.cs
- XmlAnyAttributeAttribute.cs
- SchemaNames.cs
- DataGridViewCheckBoxColumn.cs
- WindowPattern.cs
- MouseGestureValueSerializer.cs
- XmlEntityReference.cs
- MouseActionConverter.cs
- BeginStoryboard.cs
- PromptEventArgs.cs
- SystemIPAddressInformation.cs
- DoubleConverter.cs
- KeyValuePair.cs
- CardSpacePolicyElement.cs
- XmlLoader.cs
- DebuggerService.cs
- GeneralTransform3DGroup.cs
- PrintEvent.cs
- TabControlCancelEvent.cs
- WebEvents.cs
- SystemIPGlobalStatistics.cs
- FlowDocumentReader.cs
- UInt16Storage.cs
- DBConcurrencyException.cs
- TemplateControlBuildProvider.cs
- SystemWebExtensionsSectionGroup.cs
- UIElementIsland.cs
- ViewStateModeByIdAttribute.cs
- XmlSchemaElement.cs
- RouteParameter.cs
- DemultiplexingDispatchMessageFormatter.cs
- EdmEntityTypeAttribute.cs
- objectquery_tresulttype.cs
- ScrollItemPatternIdentifiers.cs
- SpinLock.cs
- QuaternionRotation3D.cs
- SqlResolver.cs
- FreeFormDragDropManager.cs
- baseaxisquery.cs
- StylusTouchDevice.cs
- ObjectDataSourceDisposingEventArgs.cs
- SmtpAuthenticationManager.cs
- ForEachAction.cs
- FixedSOMLineRanges.cs
- UrlMapping.cs
- PointHitTestResult.cs
- XPathNavigatorKeyComparer.cs
- FrugalMap.cs
- MarkedHighlightComponent.cs
- InterleavedZipPartStream.cs
- PersonalizationStateQuery.cs