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

  1. 将配置配置为模板的形式,
  2. 根据不同的环境定义环境变量
  3. 根据环境变量渲染模板,生成具体的配置

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

不过它有两个问题。

  1. 不过它没有.net core的版本,只有一个移植版nustache.core,也是3年前的
  2. 它语法检查没有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模板字符串的更多相关文章

  1. 在ASP.NET MVC应用程序中随机获取一个字符串

    在开发ASP.NET MVC应用程序时,有可能需要一个随机字符串,作为密码或是验证码等. 如果你需要的是SQL版本,可以参考<密码需要带特殊字符(二)>http://www.cnblogs ...

  2. nodejs+Express中使用mustache模板引擎

    由于公司一个seo项目,需要我协助.此项目他人已经开发大半,由于seo需要,使用了服务器端模板引擎.我项目的后端同事说项目是go语音写的,跑项目麻烦,只给了我template和css等静态文件. 为了 ...

  3. C# 中从程序中下载Excel模板

    方法一: #region 下载模板 /// <summary> /// 下载模板 /// </summary> /// <param name="sender& ...

  4. ES6中的模板字符串和新XSS Payload

    ES6中的模板字符串和新XSS Payload 众所周知,在XSS的实战对抗中,由于防守方经常会采用各种各样严格的过滤手段来过滤输入,所以我们使用的XSS Payload也会根据实际情况作出各种各样的 ...

  5. es6 中的 模板字符串

    Template literals are string literals allowing embedded expressions. You can use multi-line strings ...

  6. 第十五篇:关于TCP通信程序中数据的传递格式

    前言 在之前的回射程序中,实现了字符串的传递与回射.幸运的是,字符串的传递不用担心不同计算机类型的大小端匹配问题,然而,如果传递二进制数据,这就是一个要好好考虑的问题.在客户端和服务器使用不同的字节序 ...

  7. 关于TCP通信程序中数据的传递格式

    前言 在之前的回射程序中,实现了字符串的传递与回射.幸运的是,字符串的传递不用担心不同计算机类型的大小端匹配问题,然而,如果传递二进制数据,这就是一个要好好考虑的问题.在客户端和服务器使用不同的字节序 ...

  8. javascript模板字符串(反引号)

    模板字面量 是允许嵌入表达式的字符串字面量. 你可以使用多行字符串和字符串插值功能.它们在ES2015规范的先前版本中被称为“模板字符串”. 语法 `string text`​`string text ...

  9. 中小研发团队架构实践之生产环境诊断工具WinDbg 三分钟学会.NET微服务之Polly 使用.Net Core+IView+Vue集成上传图片功能 Fiddler原理~知多少? ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一) C#程序中设置全局代理(Global Proxy) WCF 4.0 使用说明 如何在IIS上发布,并能正常访问

    中小研发团队架构实践之生产环境诊断工具WinDbg 生产环境偶尔会出现一些异常问题,WinDbg或GDB是解决此类问题的利器.调试工具WinDbg如同医生的听诊器,是系统生病时做问题诊断的逆向分析工具 ...

随机推荐

  1. 【algo&ds】4.B树、字典树、红黑树、跳表

    上一节内容[algo&ds]4.树和二叉树.完全二叉树.满二叉树.二叉查找树.平衡二叉树.堆.哈夫曼树.散列表 7.B树 B树的应用可以参考另外一篇文章 8.字典树Trie Trie 树,也叫 ...

  2. kaldi简介及安装

    操作系统 : Ubuntu18.04_x64 gcc版本 :7.4.0 简介 Kaldi诞生于2009年的JohnsHopkins University,刚开始项目重点是子空间高斯模型(SGMM)建模 ...

  3. 用二进制写程序,提升装 X 境界

    用二进制来写程序这么反人类的事情,的确是很装的事情,但是它不但是一件很装的事情,也是掌握底层知识的基础能力之一.听我慢慢道来. 程序设计语言有高级语言和低级语言之分,尤其是现在各种编程语言的不断发展, ...

  4. slave_master_info和slave_relay_log_info中的Master_log_pos不一致

    最近在研究mysql的主从,发现一个问题,我在主库做任何修改时,在从库中只有slave_relay_log_info中的Master_log_pos在变化,而slave_master_info中的Ma ...

  5. Python爬虫实战教程:爬取网易新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Amauri PS:如有需要Python学习资料的小伙伴可以加点击 ...

  6. Selenium模块的安装

    Selenium模块 1.安装selenium python2:pip install selenium python3:pip install selenium 2.设置浏览器驱动 解压后必须与浏览 ...

  7. Python中使用cutecharts实现简单的手绘风格的图表

    场景 效果 cutecharts的Github: https://github.com/chenjiandongx/cutecharts 注: 博客: https://blog.csdn.net/ba ...

  8. .WrongArgumentException: Malformed database URL, failed to parse the connection string near ';characterEncoding=UTF-8&;serverTimezone=Asia/Shanghai'.)

    连接mysql库报的异常信息: org.springframework.transaction.CannotCreateTransactionException: Could not open JDB ...

  9. js分号问题

    总结一句话: 一行开头是括号(比如IIFE)或者方括号的时候加上分号就可以

  10. 纸壳CMS现已支持自定义扩展字段

    简介 纸壳CMS是开源免费的可视化内容管理系统. GitHub https://github.com/SeriaWei/ZKEACMS 自定义字段 纸壳CMS现已支持自定义字段,在不修改代码的情况下, ...