ConfigurationManager
Provides access to configuration files for client applications. This class cannot be inherited.
using System.Collections.Specialized;
using System.Configuration.Internal;
namespace System.Configuration
{
public static class ConfigurationManager
{
private enum InitState
{
NotStarted,
Started,
Usable,
Completed
}
private static volatile IInternalConfigSystem s_configSystem;
private static volatile InitState s_initState = InitState.NotStarted;
private static readonly object s_initLock = new object();
private static volatile Exception s_initError;
internal static bool SetConfigurationSystemInProgress {
get {
if (InitState.NotStarted < s_initState)
return s_initState < InitState.Completed;
return false;
}
}
internal static bool SupportsUserConfig {
get {
PrepareConfigSystem();
return s_configSystem.SupportsUserConfig;
}
}
public static NameValueCollection AppSettings {
get {
object section = GetSection("appSettings");
if (!(section is NameValueCollection))
throw new ConfigurationErrorsException(System.SR.Config_appsettings_declaration_invalid);
return (NameValueCollection)section;
}
}
public static ConnectionStringSettingsCollection ConnectionStrings {
get {
object section = GetSection("connectionStrings");
if (section == null || section.GetType() != typeof(ConnectionStringsSection))
throw new ConfigurationErrorsException(System.SR.Config_connectionstrings_declaration_invalid);
ConnectionStringsSection connectionStringsSection = (ConnectionStringsSection)section;
return connectionStringsSection.ConnectionStrings;
}
}
internal static void SetConfigurationSystem(IInternalConfigSystem configSystem, bool initComplete)
{
lock (s_initLock) {
if (s_initState != 0)
throw new InvalidOperationException(System.SR.Config_system_already_set);
s_configSystem = configSystem;
s_initState = (initComplete ? InitState.Completed : InitState.Usable);
}
}
private static void EnsureConfigurationSystem()
{
lock (s_initLock) {
if (s_initState < InitState.Usable) {
s_initState = InitState.Started;
try {
try {
s_configSystem = new ClientConfigurationSystem();
s_initState = InitState.Usable;
} catch (Exception inner) {
s_initError = new ConfigurationErrorsException(System.SR.Config_client_config_init_error, inner);
throw s_initError;
}
} catch {
s_initState = InitState.Completed;
throw;
}
}
}
}
internal static void SetInitError(Exception initError)
{
s_initError = initError;
}
internal static void CompleteConfigInit()
{
lock (s_initLock) {
s_initState = InitState.Completed;
}
}
private static void PrepareConfigSystem()
{
if (s_initState < InitState.Usable)
EnsureConfigurationSystem();
if (s_initError != null)
throw s_initError;
}
public static object GetSection(string sectionName)
{
if (string.IsNullOrEmpty(sectionName))
return null;
PrepareConfigSystem();
return s_configSystem.GetSection(sectionName);
}
public static void RefreshSection(string sectionName)
{
if (!string.IsNullOrEmpty(sectionName)) {
PrepareConfigSystem();
s_configSystem.RefreshConfig(sectionName);
}
}
public static Configuration OpenMachineConfiguration()
{
return OpenExeConfigurationImpl(null, true, ConfigurationUserLevel.None, null, false);
}
public static Configuration OpenMappedMachineConfiguration(ConfigurationFileMap fileMap)
{
return OpenExeConfigurationImpl(fileMap, true, ConfigurationUserLevel.None, null, false);
}
public static Configuration OpenExeConfiguration(ConfigurationUserLevel userLevel)
{
return OpenExeConfigurationImpl(null, false, userLevel, null, false);
}
public static Configuration OpenExeConfiguration(string exePath)
{
return OpenExeConfigurationImpl(null, false, ConfigurationUserLevel.None, exePath, false);
}
public static Configuration OpenMappedExeConfiguration(ExeConfigurationFileMap fileMap, ConfigurationUserLevel userLevel)
{
return OpenExeConfigurationImpl(fileMap, false, userLevel, null, false);
}
public static Configuration OpenMappedExeConfiguration(ExeConfigurationFileMap fileMap, ConfigurationUserLevel userLevel, bool preLoad)
{
return OpenExeConfigurationImpl(fileMap, false, userLevel, null, preLoad);
}
private static Configuration OpenExeConfigurationImpl(ConfigurationFileMap fileMap, bool isMachine, ConfigurationUserLevel userLevel, string exePath, bool preLoad = false)
{
if (!isMachine && ((fileMap == null && exePath == null) || (fileMap != null && ((ExeConfigurationFileMap)fileMap).ExeConfigFilename == null)) && s_configSystem != null && s_configSystem.GetType() != typeof(ClientConfigurationSystem))
throw new ArgumentException(System.SR.Config_configmanager_open_noexe);
Configuration configuration = ClientConfigurationHost.OpenExeConfiguration(fileMap, isMachine, userLevel, exePath);
if (preLoad)
PreloadConfiguration(configuration);
return configuration;
}
private static void PreloadConfiguration(Configuration configuration)
{
if (configuration != null) {
foreach (ConfigurationSection section in configuration.Sections) {
}
foreach (ConfigurationSectionGroup sectionGroup in configuration.SectionGroups) {
PreloadConfigurationSectionGroup(sectionGroup);
}
}
}
private static void PreloadConfigurationSectionGroup(ConfigurationSectionGroup sectionGroup)
{
if (sectionGroup != null) {
foreach (ConfigurationSection section in sectionGroup.Sections) {
}
foreach (ConfigurationSectionGroup sectionGroup2 in sectionGroup.SectionGroups) {
PreloadConfigurationSectionGroup(sectionGroup2);
}
}
}
}
}