/// <summary>
        /// Creates a new configuration sources based on the configuration information from the application's default
        /// configuration file.
        /// </summary>
        /// <param name="name">The name for the desired configuration source.</param>
        /// <returns>The new configuration source instance described in the configuration file.</returns>
        /// <exception cref="ConfigurationErrorsException">when no configuration information is found for name <paramref name="name"/>.</exception>
        /// <exception cref="ArgumentNullException">when <paramref name="name"/> is null or empty.</exception>
        public static IConfigurationSource Create(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentNullException("name");
            }

            ConfigurationSourceSection configurationSourceSection
                = ConfigurationSourceSection.GetConfigurationSourceSection();

            if (configurationSourceSection == null)
            {
                throw new ConfigurationErrorsException(Resources.ExceptionConfigurationSourceSectionNotFound);
            }

            ConfigurationSourceElement objectConfiguration
                = configurationSourceSection.Sources.Get(name);

            if (objectConfiguration == null)
            {
                throw new ConfigurationErrorsException(
                          string.Format(
                              Resources.Culture,
                              Resources.ExceptionNamedConfigurationNotFound,
                              name,
                              "ConfigurationSourceFactory"));
            }

            IConfigurationSource source = objectConfiguration.CreateSource();

            return(source);
        }
        /// <summary>
        /// Creates a new configuration sources based on the default configuration information from the
        /// application's default configuration file.
        /// </summary>
        /// <returns>The new configuration source instance described as the default in the configuration file,
        /// or a new instance of <see cref="SystemConfigurationSource"/> if the is no configuration sources configuration.</returns>
        /// <exception cref="ConfigurationSourceSection">when there is a configuration section but it does not define
        /// a default configurtion source, or when the configuration for the defined default configuration source is not found.</exception>
        public static IConfigurationSource Create()
        {
            ConfigurationSourceSection configurationSourceSection
                = ConfigurationSourceSection.GetConfigurationSourceSection();

            if (configurationSourceSection != null)
            {
                string systemSourceName = configurationSourceSection.SelectedSource;
                if (!string.IsNullOrEmpty(systemSourceName))
                {
                    return(Create(systemSourceName));
                }
                else
                {
                    throw new ConfigurationErrorsException(Resources.ExceptionSystemSourceNotDefined);
                }
            }

            return(new SystemConfigurationSource());
        }