当前位置:首页 > Web开发 > 正文

在.net 程序中使用Mustache模板字符串

2024-03-31 Web开发

今天弄了一个配置随着使用环境动态切换的功能,一个基本的思路是:

将配置配置为模板的形式,

根据不同的环境定义环境变量

根据环境变量渲染模板,生成具体的配置

这里面就涉及到了一个字符串模板的功能,关于模板语法,我选择的是最近比较流行的"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