Skip to content

Commit 1cf16e1

Browse files
authored
Support custom delimiter KeyPerFile configuration source (#33693)
1 parent 0590dc7 commit 1cf16e1

File tree

4 files changed

+31
-2
lines changed

4 files changed

+31
-2
lines changed

src/Configuration.KeyPerFile/src/KeyPerFileConfigurationProvider.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public KeyPerFileConfigurationProvider(KeyPerFileConfigurationSource source)
3636

3737
}
3838

39-
private static string NormalizeKey(string key)
40-
=> key.Replace("__", ConfigurationPath.KeyDelimiter);
39+
private string NormalizeKey(string key)
40+
=> key.Replace(Source.SectionDelimiter, ConfigurationPath.KeyDelimiter);
4141

4242
private static string TrimNewLine(string value)
4343
=> value.EndsWith(Environment.NewLine, StringComparison.Ordinal)

src/Configuration.KeyPerFile/src/KeyPerFileConfigurationSource.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,12 @@ public KeyPerFileConfigurationSource()
4848
/// </summary>
4949
public int ReloadDelay { get; set; } = 250;
5050

51+
/// <summary>
52+
/// The delimiter used to separate individual keys in a path.
53+
/// </summary>
54+
/// <value>Default is <c>__</c>.</value>
55+
public string SectionDelimiter { get; set; } = "__";
56+
5157
/// <summary>
5258
/// Builds the <see cref="KeyPerFileConfigurationProvider"/> for this source.
5359
/// </summary>

src/Configuration.KeyPerFile/src/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
*REMOVED*~static Microsoft.Extensions.Configuration.KeyPerFileConfigurationBuilderExtensions.AddKeyPerFile(this Microsoft.Extensions.Configuration.IConfigurationBuilder builder, string directoryPath, bool optional, bool reloadOnChange) -> Microsoft.Extensions.Configuration.IConfigurationBuilder
1515
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationProvider.KeyPerFileConfigurationProvider(Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource! source) -> void
1616
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.Build(Microsoft.Extensions.Configuration.IConfigurationBuilder! builder) -> Microsoft.Extensions.Configuration.IConfigurationProvider!
17+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.SectionDelimiter.get -> string!
18+
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.SectionDelimiter.set -> void
1719
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.get -> Microsoft.Extensions.FileProviders.IFileProvider?
1820
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.FileProvider.set -> void
1921
Microsoft.Extensions.Configuration.KeyPerFile.KeyPerFileConfigurationSource.IgnoreCondition.get -> System.Func<string!, bool>!

src/Configuration.KeyPerFile/test/KeyPerFileTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,27 @@ public void CanLoadNestedKeys()
8484
Assert.Equal("SecretValue2", config["Secret0:Secret1:Secret2:Key"]);
8585
}
8686

87+
[Fact]
88+
public void LoadWithCustomSectionDelimiter()
89+
{
90+
var testFileProvider = new TestFileProvider(
91+
new TestFile("Secret0--Secret1--Secret2--Key", "SecretValue2"),
92+
new TestFile("Secret0--Secret1--Key", "SecretValue1"),
93+
new TestFile("Secret0--Key", "SecretValue0"));
94+
95+
var config = new ConfigurationBuilder()
96+
.AddKeyPerFile(o =>
97+
{
98+
o.FileProvider = testFileProvider;
99+
o.SectionDelimiter = "--";
100+
})
101+
.Build();
102+
103+
Assert.Equal("SecretValue0", config["Secret0:Key"]);
104+
Assert.Equal("SecretValue1", config["Secret0:Secret1:Key"]);
105+
Assert.Equal("SecretValue2", config["Secret0:Secret1:Secret2:Key"]);
106+
}
107+
87108
[Fact]
88109
public void CanIgnoreFilesWithDefault()
89110
{

0 commit comments

Comments
 (0)