yml字符串连接不适用于.NET应用程序。我已尝试通过删除'$'符号,但仍无法正常工作(Java应用程序使用$符号-与Java应用程序兼容)。对于单个值,它可以正常工作,但不能与串联连接。
yml-01
cicd:
dbname:172.10.10.110
端口:5432
yml-02
数据源:
网址:jdbc:postgresql:// $ {cicd:dbname}:$ {cicd:port} / sample-db
答案 0 :(得分:0)
您应该看看YamlDotNet。
这是一个如何使用该库解决问题的示例
using YamlDotNet.RepresentationModel;
using YamlDotNet.Core;
然后使用您的方法
var dbname = "172.10.10.110";
var port = "5432";
string content;
using (var reader = new StreamReader("your yml file"))
{
content = reader.ReadToEnd();
}
var doc = new StringReader(content);
var yaml = new YamlStream();
yaml.Load(doc);
// Add the url where you use string interpolation to replace the values
var ymlFile = (YamlMappingNode)yaml.Documents[0].RootNode;
ymlFile.Children["datasource"] = new YamlMappingNode
{
{ "url", $"jdbc:postgresql://{dbname}:{port}/sample-db" }
};
yaml.Save(File.CreateText("C:\\yourNewFile.yml"), assignAnchors: false);
Here's到NetCore软件包的链接
答案 1 :(得分:0)
我已经通过向IConfiguration接口编写扩展方法解决了这一问题。
public static string ReadFromConfigRepo(this IConfiguration configuration, string key)
{
var pattern = @"\{(.*?)\}";
var query = configuration[key];
if (query.Contains('{'))
{
var matches = Regex.Matches(query, pattern);
string value;
foreach (Match m in matches)
{
value = configuration[m.Value.Substring(1, m.Value.Length - 2)];
query = query.Replace(m.Value, value);
}
}
return query.Trim();
}
答案 2 :(得分:0)
Steeltoe.Common中提供了.NET配置中占位符解析的解决方案(类似于spring提供的解决方案)。我们尚未添加WebHostBuilder
或IConfigurationBuilder
扩展名,但是如果您从Steeltoe Dev feed添加对Steeltoe.Common的最新引用,您应该可以执行以下操作:>
public static IWebHostBuilder ResolveConfigurationPlaceholders(this IWebHostBuilder hostBuilder, LoggerFactory loggerFactory = null)
{
return hostBuilder.ConfigureAppConfiguration((builderContext, config) =>
{
config.AddInMemoryCollection(PropertyPlaceholderHelper.GetResolvedConfigurationPlaceholders(config.Build(), loggerFactory?.CreateLogger("Steeltoe.Configuration.PropertyPlaceholderHelper")));
});
}
中使用