Skip to content

Commit b4323d7

Browse files
committed
Allows multi-format configurations.
1 parent a3a8022 commit b4323d7

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

src/Nacos.Microsoft.Extensions.Configuration/ConfigListener.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,10 @@ public class ConfigListener
1616
/// Configuration group
1717
/// </summary>
1818
public string Group { get; set; }
19+
20+
/// <summary>
21+
/// Configuration format
22+
/// </summary>
23+
public string Format { get; set; }
1924
}
2025
}

src/Nacos.Microsoft.Extensions.Configuration/NacosV2ConfigurationProvider.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using global::Microsoft.Extensions.Configuration;
44
using global::Microsoft.Extensions.Logging;
55
using Nacos.V2;
6+
using Nacos.V2.Utils;
67
using System;
78
using System.Collections.Concurrent;
89
using System.Collections.Generic;
@@ -14,6 +15,7 @@ internal class NacosV2ConfigurationProvider : ConfigurationProvider, IDisposable
1415
private readonly NacosV2ConfigurationSource _configurationSource;
1516

1617
private readonly INacosConfigurationParser _parser;
18+
private readonly IReadOnlyDictionary<string, INacosConfigurationParser> _parsers;
1719

1820
private readonly INacosConfigService _client;
1921

@@ -27,6 +29,7 @@ public NacosV2ConfigurationProvider(NacosV2ConfigurationSource configurationSour
2729
{
2830
_configurationSource = configurationSource;
2931
_parser = configurationSource.NacosConfigurationParser;
32+
_parsers = configurationSource.NacosConfigurationParsers;
3033
_configDict = new ConcurrentDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
3134
_listenerDict = new Dictionary<string, MsConfigListener>();
3235

@@ -55,6 +58,18 @@ public NacosV2ConfigurationProvider(NacosV2ConfigurationSource configurationSour
5558
}
5659
}
5760

61+
private INacosConfigurationParser GetParser(string format)
62+
{
63+
if (format.IsNullOrWhiteSpace()) return _parser;
64+
65+
if (_parsers.TryGetValue(format, out var parser))
66+
{
67+
return parser;
68+
}
69+
70+
throw new InvalidOperationException("Missing parser for format: " + format);
71+
}
72+
5873
internal IDictionary<string, string> GetData() => Data;
5974

6075
public void Dispose()
@@ -92,7 +107,7 @@ public override void Load()
92107

93108
_configDict.AddOrUpdate($"{_configurationSource.GetNamespace()}#{listener.Group}#{listener.DataId}", config, (x, y) => config);
94109

95-
var data = _parser.Parse(config);
110+
var data = GetParser(listener.Format).Parse(config);
96111

97112
foreach (var item in data)
98113
{
@@ -167,7 +182,7 @@ public void ReceiveConfigInfo(string configInfo)
167182
continue;
168183
}
169184

170-
var data = _provider._parser.Parse(config);
185+
var data = _provider.GetParser(listener.Format).Parse(config);
171186

172187
foreach (var item in data)
173188
{

src/Nacos.Microsoft.Extensions.Configuration/NacosV2ConfigurationSource.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ public class NacosV2ConfigurationSource : Nacos.V2.NacosSdkOptions, IConfigurati
2929
/// </summary>
3030
public INacosConfigurationParser NacosConfigurationParser { get; set; }
3131

32+
public Dictionary<string, INacosConfigurationParser> NacosConfigurationParsers { get; } =
33+
new Dictionary<string, INacosConfigurationParser>()
34+
{
35+
{ "json", DefaultJsonConfigurationStringParser.Instance }
36+
};
37+
3238
public NacosV2ConfigurationSource(INacosConfigService client, ILoggerFactory loggerFactory)
3339
{
3440
Client = client;

0 commit comments

Comments
 (0)