Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Sys / System / Configuration / SettingsBase.cs / 1305376 / 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; } } } } // 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
- EnumCodeDomSerializer.cs
- SourceChangedEventArgs.cs
- WebServiceResponse.cs
- EntityDesignerUtils.cs
- SubtreeProcessor.cs
- PassportAuthenticationModule.cs
- AxisAngleRotation3D.cs
- DataSourceSelectArguments.cs
- FtpRequestCacheValidator.cs
- InvariantComparer.cs
- ListBindingHelper.cs
- XmlSchemaSimpleTypeList.cs
- DockProviderWrapper.cs
- WsrmTraceRecord.cs
- ErrorWebPart.cs
- EnterpriseServicesHelper.cs
- DataGridViewAdvancedBorderStyle.cs
- WebContext.cs
- StrokeDescriptor.cs
- Int32Rect.cs
- CodeExpressionCollection.cs
- CodeNamespaceImport.cs
- ComponentDispatcherThread.cs
- Button.cs
- GridViewCommandEventArgs.cs
- CodeGen.cs
- ContentPlaceHolder.cs
- WarningException.cs
- ObjectRef.cs
- Clause.cs
- CodeAttributeDeclarationCollection.cs
- ListViewDataItem.cs
- Trace.cs
- ForeignConstraint.cs
- ObservableDictionary.cs
- SmtpException.cs
- HwndHost.cs
- InputReportEventArgs.cs
- NativeMethods.cs
- MultiByteCodec.cs
- DataGridHeaderBorder.cs
- DateTimeValueSerializer.cs
- securestring.cs
- EllipseGeometry.cs
- EncodingNLS.cs
- DataGridViewTopRowAccessibleObject.cs
- FixedFindEngine.cs
- MetadataItemSerializer.cs
- InputLanguageSource.cs
- WindowsProgressbar.cs
- HashRepartitionEnumerator.cs
- RealProxy.cs
- EmptyEnumerator.cs
- DebuggerAttributes.cs
- ResourceExpressionEditorSheet.cs
- WebPartVerbCollection.cs
- TypeLibraryHelper.cs
- PrePostDescendentsWalker.cs
- XsdBuildProvider.cs
- DefaultValueAttribute.cs
- DataGridCaption.cs
- RtfFormatStack.cs
- DataViewListener.cs
- CustomAttributeBuilder.cs
- HyperLinkStyle.cs
- GreenMethods.cs
- BasicBrowserDialog.designer.cs
- CoreSwitches.cs
- ValidationErrorCollection.cs
- TrackBarRenderer.cs
- WebRequestModulesSection.cs
- SelectedDatesCollection.cs
- cookieexception.cs
- ExpressionVisitor.cs
- _BaseOverlappedAsyncResult.cs
- GuidelineSet.cs
- panel.cs
- StateMachineHelpers.cs
- TextEffectCollection.cs
- ByteStorage.cs
- ColumnCollection.cs
- ZipIOFileItemStream.cs
- TrustManager.cs
- XPathDocumentNavigator.cs
- XmlDictionaryString.cs
- ETagAttribute.cs
- WebControlsSection.cs
- UIPermission.cs
- RSACryptoServiceProvider.cs
- ScriptingJsonSerializationSection.cs
- MetadataCollection.cs
- TextTreeDeleteContentUndoUnit.cs
- PolyQuadraticBezierSegmentFigureLogic.cs
- SiteMapPath.cs
- KeyBinding.cs
- MetadataWorkspace.cs
- XPathNodeIterator.cs
- StandardOleMarshalObject.cs
- ServiceReflector.cs
- ErrorFormatter.cs