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
- BuildDependencySet.cs
- x509store.cs
- MouseGestureValueSerializer.cs
- Timeline.cs
- PageCache.cs
- BinaryParser.cs
- RSACryptoServiceProvider.cs
- NotImplementedException.cs
- AuthenticationService.cs
- MachinePropertyVariants.cs
- ObjectConverter.cs
- Properties.cs
- CompiledQuery.cs
- SimpleHandlerFactory.cs
- Tile.cs
- PageStatePersister.cs
- EtwTrace.cs
- ScriptIgnoreAttribute.cs
- KeyValuePairs.cs
- MappingException.cs
- OrderingQueryOperator.cs
- AlgoModule.cs
- ParameterCollection.cs
- SqlResolver.cs
- ViewLoader.cs
- DataGridViewCellCancelEventArgs.cs
- CustomCategoryAttribute.cs
- CancelEventArgs.cs
- DefaultValueTypeConverter.cs
- Descriptor.cs
- TryCatchDesigner.xaml.cs
- DeflateInput.cs
- Composition.cs
- SiteMapNodeItemEventArgs.cs
- MultiByteCodec.cs
- Selection.cs
- WindowsRebar.cs
- sortedlist.cs
- Missing.cs
- Transactions.cs
- WebResourceAttribute.cs
- CodeTypeMember.cs
- NamespaceEmitter.cs
- ProfileModule.cs
- TableSectionStyle.cs
- TagPrefixAttribute.cs
- StateFinalizationDesigner.cs
- JoinCqlBlock.cs
- DataErrorValidationRule.cs
- LinkConverter.cs
- CheckoutException.cs
- ComPlusServiceLoader.cs
- DesignerDataTable.cs
- GenerateTemporaryTargetAssembly.cs
- UncommonField.cs
- ItemList.cs
- ResourceExpression.cs
- Event.cs
- PeerNode.cs
- StringDictionaryWithComparer.cs
- LinkedList.cs
- GeneralTransform3DGroup.cs
- QilPatternFactory.cs
- WrappedReader.cs
- NullableLongSumAggregationOperator.cs
- DBCommandBuilder.cs
- JavaScriptSerializer.cs
- DataMemberAttribute.cs
- PlacementWorkspace.cs
- ControlPersister.cs
- XsltQilFactory.cs
- JournalEntry.cs
- BindingsCollection.cs
- TcpProcessProtocolHandler.cs
- InfoCardListRequest.cs
- SortKey.cs
- NamedPipeTransportManager.cs
- SqlVersion.cs
- HashAlgorithm.cs
- PropertyGeneratedEventArgs.cs
- InkPresenterAutomationPeer.cs
- VBIdentifierTrimConverter.cs
- ServiceBehaviorAttribute.cs
- StringCollection.cs
- InternalConfigHost.cs
- ResourceIDHelper.cs
- DataSysAttribute.cs
- ObjectSecurity.cs
- FrameworkTextComposition.cs
- DataGridViewRowHeaderCell.cs
- MgmtConfigurationRecord.cs
- ReadOnlyPermissionSet.cs
- HtmlTableCell.cs
- NameValuePermission.cs
- SqlBulkCopy.cs
- EntityTypeEmitter.cs
- dtdvalidator.cs
- Hashtable.cs
- RtfNavigator.cs
- WindowClosedEventArgs.cs