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
- ColumnCollection.cs
- GuidConverter.cs
- PageWrapper.cs
- ManagedIStream.cs
- TypeLoadException.cs
- RuntimeEnvironment.cs
- StrongNameHelpers.cs
- XmlNamedNodeMap.cs
- pingexception.cs
- ServiceProviders.cs
- TabControlEvent.cs
- CodeExpressionStatement.cs
- UIElementPropertyUndoUnit.cs
- COM2Properties.cs
- Schema.cs
- StandardCommands.cs
- FamilyCollection.cs
- EpmContentDeSerializer.cs
- VolatileEnlistmentState.cs
- AutoCompleteStringCollection.cs
- Parser.cs
- QilSortKey.cs
- RadialGradientBrush.cs
- followingquery.cs
- DayRenderEvent.cs
- FixUp.cs
- EntityClassGenerator.cs
- DispatchChannelSink.cs
- Vector3DKeyFrameCollection.cs
- WpfXamlLoader.cs
- safelink.cs
- DTCTransactionManager.cs
- RichTextBoxConstants.cs
- ToolStripContextMenu.cs
- NotifyCollectionChangedEventArgs.cs
- CodeTypeReferenceCollection.cs
- MarshalDirectiveException.cs
- FrameworkElement.cs
- entityreference_tresulttype.cs
- ColumnMapTranslator.cs
- HtmlControlAdapter.cs
- StrokeNodeData.cs
- Int32.cs
- NativeCppClassAttribute.cs
- GeometryHitTestParameters.cs
- WebPartManager.cs
- UIElementHelper.cs
- IconBitmapDecoder.cs
- KnowledgeBase.cs
- ClientSettingsSection.cs
- EntityConnectionStringBuilder.cs
- PropertyTabAttribute.cs
- WorkItem.cs
- DataGridCellsPresenter.cs
- TrackBarRenderer.cs
- GZipStream.cs
- Int64Storage.cs
- Bitmap.cs
- mediapermission.cs
- TextParagraphView.cs
- OracleDateTime.cs
- CachedFontFace.cs
- DesignParameter.cs
- StateFinalizationDesigner.cs
- SessionConnectionReader.cs
- DeferredTextReference.cs
- HtmlEmptyTagControlBuilder.cs
- XPathNode.cs
- BitmapEncoder.cs
- RangeValuePattern.cs
- NamedPipeChannelFactory.cs
- PropertyTab.cs
- FreeIndexList.cs
- SimpleLine.cs
- StreamUpgradeBindingElement.cs
- WorkflowQueuingService.cs
- List.cs
- __ConsoleStream.cs
- ValidationHelpers.cs
- loginstatus.cs
- WebConfigurationHostFileChange.cs
- ToolStripOverflow.cs
- ToolStripOverflow.cs
- NameSpaceExtractor.cs
- TextFindEngine.cs
- XmlSchemaGroupRef.cs
- TempEnvironment.cs
- formatter.cs
- ControlIdConverter.cs
- ScalarRestriction.cs
- ColorTransform.cs
- BuilderPropertyEntry.cs
- WindowsFormsSynchronizationContext.cs
- StorageEndPropertyMapping.cs
- nulltextnavigator.cs
- PersonalizationProviderHelper.cs
- TypeElementCollection.cs
- SupportsEventValidationAttribute.cs
- FixedTextBuilder.cs
- Hashtable.cs