void UpdateConfiguration(String configSource) { lock (configurationUpdateLock) { ConfigurationInstanceConfigurationAccessor updatedConfigurationAccessor = new ConfigurationInstanceConfigurationAccessor(ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None)); manageabilityHelper.UpdateConfigurationManageability(updatedConfigurationAccessor); List <String> sectionsToNotify = new List <String>(); bool notifyAll = ConfigurationChangeWatcherCoordinator.MainConfigurationFileSource.Equals(configSource); foreach (String sectionName in currentConfigurationAccessor.GetRequestedSectionNames()) { ConfigurationSection currentSection = currentConfigurationAccessor.GetSection(sectionName); ConfigurationSection updatedSection = updatedConfigurationAccessor.GetSection(sectionName); if (currentSection != null || updatedSection != null) { UpdateWatchers(currentSection, updatedSection); // notify if: // - instructed to notify all // - any of the versions is null, or its config source matches the changed source if (notifyAll || (updatedSection == null || configSource.Equals(updatedSection.SectionInformation.ConfigSource)) || (currentSection == null || configSource.Equals(currentSection.SectionInformation.ConfigSource))) { sectionsToNotify.Add(sectionName); } } } currentConfigurationAccessor = updatedConfigurationAccessor; notificationCoordinator.NotifyUpdatedSections(sectionsToNotify); } }