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
- httpapplicationstate.cs
- IntranetCredentialPolicy.cs
- LocatorBase.cs
- UnknownBitmapEncoder.cs
- NamedObject.cs
- DrawingGroup.cs
- ViewManager.cs
- SafeRightsManagementPubHandle.cs
- Types.cs
- MetadataCache.cs
- AnimationException.cs
- MessageQueueException.cs
- Sql8ConformanceChecker.cs
- DesignerEventService.cs
- SecurityManager.cs
- HtmlWindowCollection.cs
- DbFunctionCommandTree.cs
- WebPartVerb.cs
- SpecialNameAttribute.cs
- ColorTransform.cs
- SapiRecoInterop.cs
- PackUriHelper.cs
- SqlAggregateChecker.cs
- UnknownWrapper.cs
- DataGridItem.cs
- OrthographicCamera.cs
- IndexingContentUnit.cs
- GAC.cs
- CodeStatement.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- ClientUIRequest.cs
- HttpHeaderCollection.cs
- ValueType.cs
- PermissionSetTriple.cs
- MemberDomainMap.cs
- SapiAttributeParser.cs
- dsa.cs
- SparseMemoryStream.cs
- ApplicationActivator.cs
- EdmFunction.cs
- StringReader.cs
- basenumberconverter.cs
- FloatMinMaxAggregationOperator.cs
- BaseProcessor.cs
- KerberosSecurityTokenProvider.cs
- QueryInterceptorAttribute.cs
- ExponentialEase.cs
- CompensationHandlingFilter.cs
- ScopeCollection.cs
- SpanIndex.cs
- MiniConstructorInfo.cs
- SmiEventStream.cs
- CorrelationToken.cs
- HostProtectionPermission.cs
- IndexerNameAttribute.cs
- UpdatePanelControlTrigger.cs
- Point3DKeyFrameCollection.cs
- NoneExcludedImageIndexConverter.cs
- PersistenceProviderFactory.cs
- EditorZoneBase.cs
- ErrorLog.cs
- QueryAccessibilityHelpEvent.cs
- Variable.cs
- JulianCalendar.cs
- translator.cs
- dbdatarecord.cs
- ObjectAnimationBase.cs
- HierarchicalDataBoundControl.cs
- CompilerScopeManager.cs
- InvalidFilterCriteriaException.cs
- AnnotationObservableCollection.cs
- TypeContext.cs
- Metafile.cs
- SymmetricKeyWrap.cs
- SQLDateTimeStorage.cs
- TextTreeUndoUnit.cs
- Wrapper.cs
- EntityDataSource.cs
- SecureEnvironment.cs
- SqlMetaData.cs
- XmlStreamStore.cs
- TextTreeRootNode.cs
- UnsafeNativeMethods.cs
- ControlIdConverter.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- WorkflowPrinting.cs
- SyncOperationState.cs
- MemberProjectionIndex.cs
- TextParagraph.cs
- EqualityComparer.cs
- DataGridViewElement.cs
- CacheOutputQuery.cs
- MethodAccessException.cs
- DataGridBoolColumn.cs
- ScriptServiceAttribute.cs
- WsatAdminException.cs
- FigureHelper.cs
- BinaryCommonClasses.cs
- SplitterEvent.cs
- XslException.cs