Code:
/ DotNET / DotNET / 8.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
- DefaultHttpHandler.cs
- FontUnitConverter.cs
- UIElement3DAutomationPeer.cs
- SmiRecordBuffer.cs
- RepeaterCommandEventArgs.cs
- HashMembershipCondition.cs
- FileNotFoundException.cs
- SamlDoNotCacheCondition.cs
- SrgsDocumentParser.cs
- XmlTextAttribute.cs
- RepeatInfo.cs
- GuidConverter.cs
- XPathQilFactory.cs
- IPHostEntry.cs
- ProfilePropertyMetadata.cs
- EditingCommands.cs
- DrawingServices.cs
- ColumnHeaderConverter.cs
- DataGridViewBand.cs
- BigInt.cs
- DataList.cs
- CanonicalFontFamilyReference.cs
- KeysConverter.cs
- JavascriptCallbackBehaviorAttribute.cs
- QueryValue.cs
- WindowsFont.cs
- PaginationProgressEventArgs.cs
- ToolStripHighContrastRenderer.cs
- FactoryRecord.cs
- Axis.cs
- FtpWebResponse.cs
- EditorAttribute.cs
- RtfControls.cs
- KnownBoxes.cs
- Message.cs
- WebBrowserProgressChangedEventHandler.cs
- ParenthesizePropertyNameAttribute.cs
- CodeDOMUtility.cs
- Component.cs
- SecurityProtocol.cs
- DbParameterCollection.cs
- Vector.cs
- StylusEventArgs.cs
- ImageDrawing.cs
- IODescriptionAttribute.cs
- ZoneMembershipCondition.cs
- SqlParameterCollection.cs
- EUCJPEncoding.cs
- ValidatingPropertiesEventArgs.cs
- Events.cs
- ToolStripTextBox.cs
- CompletionProxy.cs
- TabPage.cs
- BamlResourceDeserializer.cs
- Transform3DCollection.cs
- ArraySegment.cs
- ColorTranslator.cs
- SynchronizationLockException.cs
- Misc.cs
- PersonalizationState.cs
- _OSSOCK.cs
- SchemaCollectionCompiler.cs
- TemplateModeChangedEventArgs.cs
- AttachedPropertyBrowsableForChildrenAttribute.cs
- WindowHideOrCloseTracker.cs
- GridViewColumnCollection.cs
- SiteMapProvider.cs
- SocketPermission.cs
- CultureInfoConverter.cs
- MaterializeFromAtom.cs
- ScrollProperties.cs
- XPathDocumentIterator.cs
- FormatterConverter.cs
- DesigntimeLicenseContext.cs
- ListenerConnectionDemuxer.cs
- SQLGuidStorage.cs
- ToolStripDropDownButton.cs
- StorageInfo.cs
- DirectoryInfo.cs
- AssemblyGen.cs
- XmlILCommand.cs
- MergeFailedEvent.cs
- XmlSchemaComplexContentExtension.cs
- BitmapImage.cs
- CoreSwitches.cs
- Math.cs
- MenuItem.cs
- ManagedWndProcTracker.cs
- CompilationUnit.cs
- RangeEnumerable.cs
- ToggleButtonAutomationPeer.cs
- NotifyCollectionChangedEventArgs.cs
- MatrixTransform3D.cs
- OpenTypeLayoutCache.cs
- TrustManagerMoreInformation.cs
- Schema.cs
- CalloutQueueItem.cs
- TextEvent.cs
- InputGestureCollection.cs
- NetworkInformationPermission.cs