예제 #1
0
        /// <inheritdoc />
        public override void Load(Stream stream)
        {
            _configurationProvider.Load(stream);

            // Получим список ключей
            var keys = _configurationProvider.GetKeys();

            bool IsIncludeKey(string key) => key.EndsWith("${include}");
            bool IsNotIncludeKey(string key) => !IsIncludeKey(key);

            // Ключи с ${include}
            var keysWithIncludes = keys.Where(IsIncludeKey).ToArray();

            if (keysWithIncludes.Length > 0)
            {
                foreach (var include in keysWithIncludes)
                {
                    if (_configurationProvider.TryGet(include, out string includePath))
                    {
                        var path     = Path.Combine(_rootPath, includePath);
                        var fullPath = Path.GetFullPath(path);

                        // Создадим провайдер конфигурации и загрузим значения из него
                        var jsonConfigurationProvider = CreateConfigurationProvider(fullPath);
                        jsonConfigurationProvider.Load();

                        // Получим все ключи
                        var keysToInclude = jsonConfigurationProvider.GetKeys();

                        // Добавим все данные из подгруженного файла
                        jsonConfigurationProvider.AddValuesToDictionary(keysToInclude, Data);
                    }
                }

                // Добавим ключи, которые были в базовом провайдере
                var otherKeys = keys.Where(IsNotIncludeKey).ToArray();
                _configurationProvider.AddValuesToDictionary(otherKeys, Data);
            }
            else
            {
                // Добавим ключи, которые были в базовом провайдере
                _configurationProvider.AddValuesToDictionary(keys, Data);
            }
        }
 public bool TryGet(string key, out string value)
 {
     return(_provider.TryGet(key, out value));
 }