Skip to content

Commit 487834d

Browse files
committed
fix: Обработка всех провайдеров в Set для IConfiguration
Метод расширения Set теперь перебирает все провайдеры конфигурации, а не только первый WritableJsonConfigurationProvider. Это обеспечивает корректную работу с несколькими провайдерами и повышает гибкость. Аналогичные изменения внесены для ConfigurationSection. Улучшено форматирование кода.
1 parent 787449d commit 487834d

1 file changed

Lines changed: 24 additions & 14 deletions

File tree

src/WritableJsonConfiguration/WritableJsonConfigurationProviderExtensions.cs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Microsoft.Extensions.Configuration
77
{
88
public static class WritableJsonConfigurationProviderExtensions
9-
{
9+
{
1010
/// <summary>
1111
/// Set value for current section
1212
/// </summary>
@@ -18,19 +18,29 @@ public static void Set(this IConfiguration configuration, object value)
1818
switch (configuration)
1919
{
2020
case IConfigurationRoot configurationRoot:
21-
{
22-
var provider = configurationRoot.Providers.First(p => p is WritableJsonConfigurationProvider) as WritableJsonConfigurationProvider;
23-
provider.Set(null, value);
24-
break;
25-
}
21+
{
22+
foreach (var provider in configurationRoot.Providers)
23+
{
24+
if (provider is WritableJsonConfigurationProvider writableProvider)
25+
writableProvider.Set(null, value);
26+
else
27+
provider.Set(null, value.ToString());
28+
}
29+
break;
30+
}
2631
case ConfigurationSection configurationSection:
27-
{
28-
var rootProp = typeof(ConfigurationSection).GetField("_root", BindingFlags.NonPublic | BindingFlags.Instance);
29-
var root = rootProp.GetValue(configurationSection) as IConfigurationRoot;
30-
var provider = root.Providers.First(p => p is WritableJsonConfigurationProvider) as WritableJsonConfigurationProvider;
31-
provider.Set(configurationSection.Path, value);
32-
break;
33-
}
32+
{
33+
var rootProp = typeof(ConfigurationSection).GetField("_root", BindingFlags.NonPublic | BindingFlags.Instance);
34+
var root = rootProp.GetValue(configurationSection) as IConfigurationRoot;
35+
foreach (var provider in root.Providers)
36+
{
37+
if (provider is WritableJsonConfigurationProvider writableProvider)
38+
writableProvider.Set(configurationSection.Path, value);
39+
else
40+
provider.Set(configurationSection.Path, value.ToString());
41+
}
42+
break;
43+
}
3444
default:
3545
throw new ArgumentOutOfRangeException(nameof(configuration));
3646
}
@@ -46,7 +56,7 @@ public static void Set(this IConfiguration configuration, string section, object
4656
{
4757
configuration.GetSection(section).Set(value);
4858
}
49-
59+
5060
/// <summary>
5161
/// Get object by section
5262
/// </summary>

0 commit comments

Comments
 (0)