/// <summary>
        /// Applies the extension configuration section loading behavior to the extensions.
        /// </summary>
        /// <param name="extensions">The extensions.</param>
        public void Behave(IEnumerable <IExtension> extensions)
        {
            Ensure.ArgumentNotNull(extensions, "extensions");

            foreach (IExtension extension in extensions)
            {
                IHaveConfigurationSectionName sectionNameProvider = this.factory.CreateHaveConfigurationSectionName(extension);
                ILoadConfigurationSection     sectionProvider     = this.factory.CreateLoadConfigurationSection(extension);

                ExtensionConfigurationSection section = GetExtensionConfigurationSection(sectionNameProvider, sectionProvider);

                if (!section.Configuration.OfType <ExtensionSettingsElement>().Any())
                {
                    continue;
                }

                IConsumeConfiguration consumer = this.factory.CreateConsumeConfiguration(extension);

                FillConsumerConfiguration(section, consumer);

                IHaveConversionCallbacks       conversionCallbacksProvider       = this.factory.CreateHaveConversionCallbacks(extension);
                IHaveDefaultConversionCallback defaultConversionCallbackProvider = this.factory.CreateHaveDefaultConversionCallback(extension);

                this.assignExtensionProperties.Assign(this.reflectExtensionProperties, extension, consumer, conversionCallbacksProvider, defaultConversionCallbackProvider);
            }
        }
        private static void FillConsumerConfiguration(ExtensionConfigurationSection section, IConsumeConfiguration consumer)
        {
            foreach (ExtensionSettingsElement settingsElement in section.Configuration)
            {
                string key   = settingsElement.Key;
                string value = settingsElement.Value;

                consumer.Configuration.Add(key, value);
            }
        }
        /// <summary>
        /// Creates a <see cref="ExtensionConfigurationSection"/> according to the provided settings dictionary.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <returns>A newly created <see cref="ExtensionConfigurationSection"/>.</returns>
        public static ExtensionConfigurationSection CreateSection(params KeyValuePair<string, string>[] settings)
        {
            var section = new ExtensionConfigurationSection();
            var elementCollection = new ExtensionSettingsElementCollection();

            foreach (ExtensionSettingsElement element in settings.Select(settingPair => new ExtensionSettingsElement { Key = settingPair.Key, Value = settingPair.Value }))
            {
                elementCollection["Configuration"] = element;
            }

            section.Configuration = elementCollection;

            return section;
        }
        /// <summary>
        /// Creates a <see cref="ExtensionConfigurationSection"/> according to the provided settings dictionary.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <returns>A newly created <see cref="ExtensionConfigurationSection"/>.</returns>
        public static ExtensionConfigurationSection CreateSection(params KeyValuePair <string, string>[] settings)
        {
            var section           = new ExtensionConfigurationSection();
            var elementCollection = new ExtensionSettingsElementCollection();

            foreach (ExtensionSettingsElement element in settings.Select(settingPair => new ExtensionSettingsElement {
                Key = settingPair.Key, Value = settingPair.Value
            }))
            {
                elementCollection["Configuration"] = element;
            }

            section.Configuration = elementCollection;

            return(section);
        }