在.net 程序中使用Mustache模板字符串
今天弄了一个配置随着使用环境动态切换的功能,一个基本的思路是:
将配置配置为模板的形式,
根据不同的环境定义环境变量
根据环境变量渲染模板,生成具体的配置
这里面就涉及到了一个字符串模板的功能,关于模板语法,我选择的是最近比较流行的"Mustache"语法 ,基本格式就是基于双大括号的文本插值,
????<span>Message: {{ msg }}</span>
Mustache的特点是比较简单易读易用,就算运维人员也不难理解和使用。
至于到了实现,本身只是实现一个简单的花括号插值还是比较简单的,自己实现也没几行代码,,但考虑到以后的扩展性,还是使用支持完整的Mustache语法的引擎吧,官方的C#解析库是stubble,一个基本示例如下:
????var stubble = new
StubbleBuilder().Build();
????var output = stubble.Render("hi {{name}}", new {name = "world"});
也能接受Dictionary类型作为参数,非常方便。
????var output = stubble.Render("hi {{name}}",
????????new
Dictionary<string, object>()
????????{
???????????? ["name"] = "world"
????????});
其他的例子这里就不介绍了,如果感兴趣可以查看其官方示例。
另外一个比较流行的Mustache库是Nustache,体积要小些,接口也要简单点,
????var output = Render.StringToString("hi {{name}}", new {name = "world"});
不过它有两个问题。
不过它没有.net core的版本,只有一个移植版nustache.core,也是3年前的
它语法检查没有stubble严格,例如渲染""hi {{name} }""这样一个错误的模板不抛异常,并给出了错误的渲染结果。而stubble会报错,
基于以上两个原因,我觉得还是官方推荐的stubble更合适些。
除此之外,我在搜索字符串模板的时候,找到了另一个比较流行的模板liquid,语法用起来也非常类似
????Template template = Template.Parse("hi {{name}}");
// Parses and compiles the template
????template.Render(Hash.FromAnonymousObject(new { name = "tobi" })); // => "hi tobi"
感兴趣的朋友可以参考下如下文章:DotLiquid模板引擎简介
?
在.net 程序中使用Mustache模板字符串
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/42965.html