public static MultiSourceKeyValueConfiguration Build(
            [NotNull] this AppSettingsBuilder appSettingsBuild,
            Action <string>?logAction = null)
        {
            if (appSettingsBuild is null)
            {
                throw new ArgumentNullException(nameof(appSettingsBuild));
            }

            var multiSourceKeyValueConfiguration =
                new MultiSourceKeyValueConfiguration(new DecoratorDelegator(appSettingsBuild), logAction);

            return(Initialize(multiSourceKeyValueConfiguration, logAction));
        }
        public static AppSettingsDecoratorBuilder DecorateWith(
            [NotNull] this AppSettingsBuilder builder,
            [NotNull] IKeyValueConfigurationDecorator decorator)
        {
            if (builder is null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            if (decorator is null)
            {
                throw new ArgumentNullException(nameof(decorator));
            }

            return(new AppSettingsDecoratorBuilder(builder, decorator));
        }
        /// <summary>
        ///     Add new configuration, last one wins
        /// </summary>
        /// <param name="appSettingsBuilder"></param>
        /// <param name="keyValueConfiguration"></param>
        /// <returns></returns>
        public static AppSettingsBuilder Add(
            [NotNull] this AppSettingsBuilder appSettingsBuilder,
            [NotNull] IKeyValueConfiguration keyValueConfiguration)
        {
            if (appSettingsBuilder is null)
            {
                throw new ArgumentNullException(nameof(appSettingsBuilder));
            }

            if (keyValueConfiguration is null)
            {
                throw new ArgumentNullException(nameof(keyValueConfiguration));
            }

            return(new AppSettingsBuilder(keyValueConfiguration, appSettingsBuilder));
        }