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
- Cursors.cs
- ScriptRef.cs
- HtmlElement.cs
- SecurityContextSecurityTokenAuthenticator.cs
- ToolStripGrip.cs
- SparseMemoryStream.cs
- ToolStripContainer.cs
- safelink.cs
- UniqueConstraint.cs
- OleDbConnectionInternal.cs
- WindowsTokenRoleProvider.cs
- ContextStack.cs
- Stack.cs
- ParagraphVisual.cs
- mda.cs
- MessageHeaderInfoTraceRecord.cs
- WebHttpSecurity.cs
- Expr.cs
- ObjectStateFormatter.cs
- SmtpLoginAuthenticationModule.cs
- ProcessThread.cs
- SqlDataSourceFilteringEventArgs.cs
- DataControlHelper.cs
- JsonEncodingStreamWrapper.cs
- TableStyle.cs
- PartialCachingAttribute.cs
- ExpressionBuilderCollection.cs
- ObjectStorage.cs
- EncryptedReference.cs
- AnimatedTypeHelpers.cs
- TreeViewItemAutomationPeer.cs
- XmlSchemaAnnotated.cs
- NaturalLanguageHyphenator.cs
- SetterBaseCollection.cs
- ValueType.cs
- Column.cs
- XmlValueConverter.cs
- TranslateTransform3D.cs
- Part.cs
- UpdateTracker.cs
- StreamProxy.cs
- FileLevelControlBuilderAttribute.cs
- DateTimeValueSerializer.cs
- DesignerPerfEventProvider.cs
- AtomPub10ServiceDocumentFormatter.cs
- InstanceLockLostException.cs
- SmtpMail.cs
- X509SecurityToken.cs
- XmlHierarchyData.cs
- FixedLineResult.cs
- ToolBarPanel.cs
- IdentitySection.cs
- TypeBrowser.xaml.cs
- PrintDocument.cs
- WorkflowEnvironment.cs
- PaginationProgressEventArgs.cs
- HtmlShim.cs
- DirectoryInfo.cs
- View.cs
- FilteredXmlReader.cs
- ACE.cs
- ServiceMetadataPublishingElement.cs
- TimeStampChecker.cs
- RowVisual.cs
- FlowDecisionDesigner.xaml.cs
- COM2TypeInfoProcessor.cs
- MatrixCamera.cs
- NotifyIcon.cs
- DispatchChannelSink.cs
- StringExpressionSet.cs
- FtpRequestCacheValidator.cs
- DateTimePicker.cs
- GetCertificateRequest.cs
- XomlCompilerError.cs
- SqlCommandSet.cs
- AutoCompleteStringCollection.cs
- DrawingGroupDrawingContext.cs
- Error.cs
- FileReservationCollection.cs
- DataSourceControlBuilder.cs
- SizeFConverter.cs
- XmlDownloadManager.cs
- SessionStateUtil.cs
- DataColumn.cs
- _SSPISessionCache.cs
- StorageConditionPropertyMapping.cs
- CategoryAttribute.cs
- DispatcherHookEventArgs.cs
- ExpressionPrefixAttribute.cs
- LoginDesignerUtil.cs
- DuplicateWaitObjectException.cs
- APCustomTypeDescriptor.cs
- RegisteredArrayDeclaration.cs
- SizeF.cs
- _UriSyntax.cs
- DocumentsTrace.cs
- ServiceDescription.cs
- ComplexTypeEmitter.cs
- Rss20ItemFormatter.cs
- ColorMap.cs