Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Configuration / System / Configuration / Configuration.cs / 1 / Configuration.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using ClassConfiguration = System.Configuration.Configuration;
using System.Collections;
using System.Configuration;
using System.Configuration.Internal;
using System.IO;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Threading;
namespace System.Configuration {
//
// An instance of the Configuration class represents a single level
// in the configuration hierarchy. Its contents can be edited and
// saved to disk.
//
// It is not thread safe for writing.
//
public sealed class Configuration {
private Type _typeConfigHost; // type of config host
private object[] _hostInitConfigurationParams; // params to init config host
private IInternalConfigRoot _configRoot; // root of this configuration hierarchy
private MgmtConfigurationRecord _configRecord; // config record for this level in the hierarchy
private ConfigurationSectionGroup _rootSectionGroup; // section group for the root of all sections
private ConfigurationLocationCollection _locations; // support for ConfigurationLocationsCollection
private ContextInformation _evalContext; // evaluation context
internal Configuration(string locationSubPath, Type typeConfigHost, params object[] hostInitConfigurationParams) {
_typeConfigHost = typeConfigHost;
_hostInitConfigurationParams = hostInitConfigurationParams;
_configRoot = new InternalConfigRoot();
IInternalConfigHost configHost = (IInternalConfigHost) TypeUtil.CreateInstanceWithReflectionPermission(typeConfigHost);
// Wrap the host with the UpdateConfigHost to support SaveAs.
IInternalConfigHost updateConfigHost = new UpdateConfigHost(configHost);
_configRoot.Init(updateConfigHost, true);
//
// Set the configuration paths for this Configuration.
// We do this in a separate step so that the WebConfigurationHost
// can use this object's _configRoot to get the section,
// which is used in it's MapPath implementation.
//
string configPath, locationConfigPath;
configHost.InitForConfiguration(ref locationSubPath, out configPath, out locationConfigPath, _configRoot, hostInitConfigurationParams);
if (!String.IsNullOrEmpty(locationSubPath) && !updateConfigHost.SupportsLocation) {
throw ExceptionUtil.UnexpectedError("Configuration::ctor");
}
if (String.IsNullOrEmpty(locationSubPath) != String.IsNullOrEmpty(locationConfigPath)) {
throw ExceptionUtil.UnexpectedError("Configuration::ctor");
}
// Get the configuration record for this config file.
_configRecord = (MgmtConfigurationRecord) _configRoot.GetConfigRecord(configPath);
//
// Create another MgmtConfigurationRecord for the location that is a child of the above record.
// Note that this does not match the resolution hiearchy that is used at runtime.
//
if (!String.IsNullOrEmpty(locationSubPath)) {
_configRecord = MgmtConfigurationRecord.Create(
_configRoot, _configRecord, locationConfigPath, locationSubPath);
}
//
// Throw if the config record we created contains global errors.
//
_configRecord.ThrowIfInitErrors();
}
//
// Create a new instance of Configuration for the locationSubPath,
// with the initialization parameters that were used to create this configuration.
//
internal Configuration OpenLocationConfiguration(string locationSubPath) {
return new Configuration(locationSubPath, _typeConfigHost, _hostInitConfigurationParams);
}
// public properties
public AppSettingsSection AppSettings {
get {
return (AppSettingsSection) GetSection("appSettings");
}
}
public ConnectionStringsSection ConnectionStrings {
get {
return (ConnectionStringsSection) GetSection("connectionStrings");
}
}
public string FilePath {
get {
return _configRecord.ConfigurationFilePath;
}
}
public bool HasFile {
get {
return _configRecord.HasStream;
}
}
public ConfigurationLocationCollection Locations {
get {
if (_locations == null) {
_locations = _configRecord.GetLocationCollection(this);
}
return _locations;
}
}
public ContextInformation EvaluationContext {
get {
if (_evalContext == null) {
_evalContext = new ContextInformation(_configRecord);
}
return _evalContext;
}
}
public ConfigurationSectionGroup RootSectionGroup {
get {
if (_rootSectionGroup == null) {
_rootSectionGroup = new ConfigurationSectionGroup();
_rootSectionGroup.RootAttachToConfigurationRecord(_configRecord);
}
return _rootSectionGroup;
}
}
public ConfigurationSectionCollection Sections {
get {
return RootSectionGroup.Sections;
}
}
public ConfigurationSectionGroupCollection SectionGroups {
get {
return RootSectionGroup.SectionGroups;
}
}
// public methods
public ConfigurationSection GetSection(string sectionName) {
ConfigurationSection section = (ConfigurationSection) _configRecord.GetSection(sectionName);
return section;
}
public ConfigurationSectionGroup GetSectionGroup(string sectionGroupName) {
ConfigurationSectionGroup sectionGroup = _configRecord.GetSectionGroup(sectionGroupName);
return sectionGroup;
}
// NamespaceDeclared
//
// Is the namespace declared in the file or not?
//
// ie. xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"
// (currently this is the only one we allow)
//
// get - Return if it was declared in the file.
// set - Set if we should save the namespace or not
//
public bool NamespaceDeclared {
get {
return _configRecord.NamespacePresent;
}
set {
_configRecord.NamespacePresent = value;
}
}
public void Save() {
SaveAsImpl(null, ConfigurationSaveMode.Modified, false);
}
public void Save(ConfigurationSaveMode saveMode) {
SaveAsImpl(null, saveMode, false);
}
public void Save(ConfigurationSaveMode saveMode, bool forceSaveAll) {
SaveAsImpl(null, saveMode, forceSaveAll);
}
public void SaveAs(string filename) {
SaveAs(filename, ConfigurationSaveMode.Modified, false);
}
public void SaveAs(string filename, ConfigurationSaveMode saveMode) {
SaveAs(filename, saveMode, false);
}
public void SaveAs(string filename, ConfigurationSaveMode saveMode, bool forceSaveAll) {
if (String.IsNullOrEmpty(filename)) {
throw ExceptionUtil.ParameterNullOrEmpty("filename");
}
SaveAsImpl(filename, saveMode, forceSaveAll);
}
private void SaveAsImpl(string filename, ConfigurationSaveMode saveMode, bool forceSaveAll) {
if (String.IsNullOrEmpty(filename)) {
filename = null;
}
else {
filename = System.IO.Path.GetFullPath(filename);
}
if (forceSaveAll) {
ForceGroupsRecursive(RootSectionGroup);
}
_configRecord.SaveAs(filename, saveMode, forceSaveAll);
}
// Force all sections and section groups to be instantiated.
private void ForceGroupsRecursive(ConfigurationSectionGroup group) {
foreach (ConfigurationSection configSection in group.Sections) {
// Force the section to be read into the cache
ConfigurationSection section = group.Sections[configSection.SectionInformation.Name];
}
foreach (ConfigurationSectionGroup sectionGroup in group.SectionGroups) {
ForceGroupsRecursive(group.SectionGroups[sectionGroup.Name]);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
using ClassConfiguration = System.Configuration.Configuration;
using System.Collections;
using System.Configuration;
using System.Configuration.Internal;
using System.IO;
using System.Reflection;
using System.Security;
using System.Security.Permissions;
using System.Threading;
namespace System.Configuration {
//
// An instance of the Configuration class represents a single level
// in the configuration hierarchy. Its contents can be edited and
// saved to disk.
//
// It is not thread safe for writing.
//
public sealed class Configuration {
private Type _typeConfigHost; // type of config host
private object[] _hostInitConfigurationParams; // params to init config host
private IInternalConfigRoot _configRoot; // root of this configuration hierarchy
private MgmtConfigurationRecord _configRecord; // config record for this level in the hierarchy
private ConfigurationSectionGroup _rootSectionGroup; // section group for the root of all sections
private ConfigurationLocationCollection _locations; // support for ConfigurationLocationsCollection
private ContextInformation _evalContext; // evaluation context
internal Configuration(string locationSubPath, Type typeConfigHost, params object[] hostInitConfigurationParams) {
_typeConfigHost = typeConfigHost;
_hostInitConfigurationParams = hostInitConfigurationParams;
_configRoot = new InternalConfigRoot();
IInternalConfigHost configHost = (IInternalConfigHost) TypeUtil.CreateInstanceWithReflectionPermission(typeConfigHost);
// Wrap the host with the UpdateConfigHost to support SaveAs.
IInternalConfigHost updateConfigHost = new UpdateConfigHost(configHost);
_configRoot.Init(updateConfigHost, true);
//
// Set the configuration paths for this Configuration.
// We do this in a separate step so that the WebConfigurationHost
// can use this object's _configRoot to get the section,
// which is used in it's MapPath implementation.
//
string configPath, locationConfigPath;
configHost.InitForConfiguration(ref locationSubPath, out configPath, out locationConfigPath, _configRoot, hostInitConfigurationParams);
if (!String.IsNullOrEmpty(locationSubPath) && !updateConfigHost.SupportsLocation) {
throw ExceptionUtil.UnexpectedError("Configuration::ctor");
}
if (String.IsNullOrEmpty(locationSubPath) != String.IsNullOrEmpty(locationConfigPath)) {
throw ExceptionUtil.UnexpectedError("Configuration::ctor");
}
// Get the configuration record for this config file.
_configRecord = (MgmtConfigurationRecord) _configRoot.GetConfigRecord(configPath);
//
// Create another MgmtConfigurationRecord for the location that is a child of the above record.
// Note that this does not match the resolution hiearchy that is used at runtime.
//
if (!String.IsNullOrEmpty(locationSubPath)) {
_configRecord = MgmtConfigurationRecord.Create(
_configRoot, _configRecord, locationConfigPath, locationSubPath);
}
//
// Throw if the config record we created contains global errors.
//
_configRecord.ThrowIfInitErrors();
}
//
// Create a new instance of Configuration for the locationSubPath,
// with the initialization parameters that were used to create this configuration.
//
internal Configuration OpenLocationConfiguration(string locationSubPath) {
return new Configuration(locationSubPath, _typeConfigHost, _hostInitConfigurationParams);
}
// public properties
public AppSettingsSection AppSettings {
get {
return (AppSettingsSection) GetSection("appSettings");
}
}
public ConnectionStringsSection ConnectionStrings {
get {
return (ConnectionStringsSection) GetSection("connectionStrings");
}
}
public string FilePath {
get {
return _configRecord.ConfigurationFilePath;
}
}
public bool HasFile {
get {
return _configRecord.HasStream;
}
}
public ConfigurationLocationCollection Locations {
get {
if (_locations == null) {
_locations = _configRecord.GetLocationCollection(this);
}
return _locations;
}
}
public ContextInformation EvaluationContext {
get {
if (_evalContext == null) {
_evalContext = new ContextInformation(_configRecord);
}
return _evalContext;
}
}
public ConfigurationSectionGroup RootSectionGroup {
get {
if (_rootSectionGroup == null) {
_rootSectionGroup = new ConfigurationSectionGroup();
_rootSectionGroup.RootAttachToConfigurationRecord(_configRecord);
}
return _rootSectionGroup;
}
}
public ConfigurationSectionCollection Sections {
get {
return RootSectionGroup.Sections;
}
}
public ConfigurationSectionGroupCollection SectionGroups {
get {
return RootSectionGroup.SectionGroups;
}
}
// public methods
public ConfigurationSection GetSection(string sectionName) {
ConfigurationSection section = (ConfigurationSection) _configRecord.GetSection(sectionName);
return section;
}
public ConfigurationSectionGroup GetSectionGroup(string sectionGroupName) {
ConfigurationSectionGroup sectionGroup = _configRecord.GetSectionGroup(sectionGroupName);
return sectionGroup;
}
// NamespaceDeclared
//
// Is the namespace declared in the file or not?
//
// ie. xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"
// (currently this is the only one we allow)
//
// get - Return if it was declared in the file.
// set - Set if we should save the namespace or not
//
public bool NamespaceDeclared {
get {
return _configRecord.NamespacePresent;
}
set {
_configRecord.NamespacePresent = value;
}
}
public void Save() {
SaveAsImpl(null, ConfigurationSaveMode.Modified, false);
}
public void Save(ConfigurationSaveMode saveMode) {
SaveAsImpl(null, saveMode, false);
}
public void Save(ConfigurationSaveMode saveMode, bool forceSaveAll) {
SaveAsImpl(null, saveMode, forceSaveAll);
}
public void SaveAs(string filename) {
SaveAs(filename, ConfigurationSaveMode.Modified, false);
}
public void SaveAs(string filename, ConfigurationSaveMode saveMode) {
SaveAs(filename, saveMode, false);
}
public void SaveAs(string filename, ConfigurationSaveMode saveMode, bool forceSaveAll) {
if (String.IsNullOrEmpty(filename)) {
throw ExceptionUtil.ParameterNullOrEmpty("filename");
}
SaveAsImpl(filename, saveMode, forceSaveAll);
}
private void SaveAsImpl(string filename, ConfigurationSaveMode saveMode, bool forceSaveAll) {
if (String.IsNullOrEmpty(filename)) {
filename = null;
}
else {
filename = System.IO.Path.GetFullPath(filename);
}
if (forceSaveAll) {
ForceGroupsRecursive(RootSectionGroup);
}
_configRecord.SaveAs(filename, saveMode, forceSaveAll);
}
// Force all sections and section groups to be instantiated.
private void ForceGroupsRecursive(ConfigurationSectionGroup group) {
foreach (ConfigurationSection configSection in group.Sections) {
// Force the section to be read into the cache
ConfigurationSection section = group.Sections[configSection.SectionInformation.Name];
}
foreach (ConfigurationSectionGroup sectionGroup in group.SectionGroups) {
ForceGroupsRecursive(group.SectionGroups[sectionGroup.Name]);
}
}
}
}
// 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
- ScrollChrome.cs
- LocationReference.cs
- GatewayDefinition.cs
- ZipIOCentralDirectoryBlock.cs
- TdsParserStaticMethods.cs
- wmiprovider.cs
- XmlDictionaryWriter.cs
- HttpAsyncResult.cs
- ContextQuery.cs
- ISO2022Encoding.cs
- EntityContainerRelationshipSet.cs
- __FastResourceComparer.cs
- QueryOutputWriter.cs
- WebReferencesBuildProvider.cs
- SqlTrackingService.cs
- ColorConverter.cs
- TextServicesCompartmentContext.cs
- UpdatePanel.cs
- SafeBitVector32.cs
- ToolTipAutomationPeer.cs
- DefaultCommandExtensionCallback.cs
- AccessKeyManager.cs
- CodePropertyReferenceExpression.cs
- altserialization.cs
- ObjectStateFormatter.cs
- UInt16Storage.cs
- ThicknessAnimation.cs
- objectquery_tresulttype.cs
- SecurityVerifiedMessage.cs
- RepeaterItemEventArgs.cs
- OleDbConnection.cs
- EdmItemCollection.cs
- MouseEventArgs.cs
- Stylesheet.cs
- RuleDefinitions.cs
- EventWaitHandleSecurity.cs
- ClientSettings.cs
- PixelFormat.cs
- MediaElementAutomationPeer.cs
- TraceSource.cs
- ItemCheckedEvent.cs
- SoapServerProtocol.cs
- WriteTimeStream.cs
- Image.cs
- MouseDevice.cs
- WCFBuildProvider.cs
- SafeNativeMemoryHandle.cs
- ThreadLocal.cs
- DocumentOrderComparer.cs
- EmbeddedMailObjectsCollection.cs
- ValuePattern.cs
- ElementProxy.cs
- MobileComponentEditorPage.cs
- PersonalizationStateInfo.cs
- ErrorProvider.cs
- XmlSchemaType.cs
- dtdvalidator.cs
- XmlNotation.cs
- XmlSignatureManifest.cs
- TemplateXamlParser.cs
- XmlAttributeAttribute.cs
- CurrentChangingEventManager.cs
- RelatedCurrencyManager.cs
- MobileControlsSectionHandler.cs
- FrameDimension.cs
- SystemInformation.cs
- DescendentsWalkerBase.cs
- HyperLink.cs
- ApplicationDirectory.cs
- ObjectListCommandCollection.cs
- TextChangedEventArgs.cs
- Calendar.cs
- ClaimTypeElementCollection.cs
- GraphicsPathIterator.cs
- UIElementIsland.cs
- XmlIlGenerator.cs
- ListControl.cs
- InfoCardRSACryptoProvider.cs
- SecureStringHasher.cs
- HttpChannelHelper.cs
- SecurityTokenTypes.cs
- XmlCDATASection.cs
- PropagatorResult.cs
- OdbcConnectionHandle.cs
- Track.cs
- PasswordBox.cs
- RemoteWebConfigurationHostStream.cs
- ConfigXmlWhitespace.cs
- EncryptedPackageFilter.cs
- XPathEmptyIterator.cs
- DataPager.cs
- UniqueConstraint.cs
- ScriptHandlerFactory.cs
- MatrixKeyFrameCollection.cs
- keycontainerpermission.cs
- DataBindingExpressionBuilder.cs
- NGCSerializerAsync.cs
- ProfileEventArgs.cs
- ExceptionCollection.cs
- ItemList.cs