private void MergeHierarchy(IConfigurationUIHierarchy configurationHierarhcy, Dictionary <string, ConfigurationNodeMergeData> mergeDataByPath) { string rootNodeName = configurationHierarhcy.RootNode.Name; foreach (String configurationNodePath in mergeDataByPath.Keys) { ConfigurationNodeMergeData mergeData = mergeDataByPath[configurationNodePath]; if (mergeData.OverrideProperties) { ConfigurationNode node = configurationHierarhcy.FindNodeByPath(rootNodeName + configurationNodePath); if (node != null) { PropertyDescriptorCollection propertiesOnNode = TypeDescriptor.GetProperties(node); foreach (PropertyDescriptor property in propertiesOnNode) { object propertyValue = mergeData.GetPropertyValue(property.Name, property.PropertyType, property.GetValue(node), configurationHierarhcy); property.SetValue(node, propertyValue); } } } } }
private void CopyEnvironmentOverrides(EnvironmentMergeSection environmentMergeSection, Dictionary <string, ConfigurationNodeMergeData> mergeDataByPath, IConfigurationUIHierarchy configurationHierarchy) { foreach (string path in mergeDataByPath.Keys) { ConfigurationNodeMergeData mergeData = mergeDataByPath[path]; EnvironmentNodeMergeElement mergeElement = new EnvironmentNodeMergeElement(); mergeElement.ConfigurationNodePath = path; mergeElement.OverrideProperties = mergeData.OverrideProperties; foreach (string propertyName in mergeData.AllPropertyNames) { object propertyValue = mergeData.GetPropertyValue(propertyName, typeof(string), null, configurationHierarchy); string serializedRepresentation = SerializationUtility.SerializeToString(propertyValue, configurationHierarchy); NameValueConfigurationElement keyValue = new NameValueConfigurationElement(propertyName, serializedRepresentation); mergeElement.OverriddenProperties.Add(keyValue); } environmentMergeSection.MergeElements.Add(mergeElement); } }