正在从模板生成邮件

本文关键字: | 更新日期: 2023-09-27 18:13:50

故事

我想从模板生成一封邮件。

模板看起来类似于此:

<h1>@Model.Name</h1>
@foreach(var row in Model.Rows)
{
    <p>@row</p>
}
@if(Model.Case)
{
    <p>Thats the case</p>
} 

这些模板存储在数据库中,每个用户只有很少(~10(个模板,并且可以对其进行修改。

到目前为止,我们使用的是RazorEngine,我们总是简单地调用Razor.Parse()。这对我们来说很好,直到我们遇到磁盘空间问题。(Parse((在临时文件夹中的每个调用上都会生成一个新的程序集,所以有很多(


我尝试了什么

因此,我认为我需要切换到使用RazorEngines的新功能Compile(), Run(), RunCompile(),认为在进行更改时可以编译模板(将DB Id作为模板密钥(,因此每个模板只有一个程序集。然后,当我需要带有数据的邮件时,我会调用"Run(("。但这是不可能的。另一个问题是内存泄漏,因为每个模板程序集都将保留在缓存中。

我们还查看了stringtemplate.org(c#开发状态看起来不太好(和微软的MailDefinition(只能用于变量,不支持循环…(


我在找什么

基本上,我正在寻找一个不缓存任何东西的RazorEngine。我使用了Razor.Parse(),没有任何性能问题。

RazorEngine中有没有我没有看到的禁用缓存的设置?有没有RazorEngine的替代品可以做到这一点?或者有没有一种不同的方法可以从模板中生成邮件?

正在从模板生成邮件

您研究过T4文本模板吗?您可以构建"编译"为任何内容的设计时或运行时文本模板。现实世界中的几个例子:

  • 实体框架使用这些来生成C#模型文件(.cs(
  • 您可以使用T4模板生成包含C#代码(变量、条件等(的.sql文件(或仅sql语句(,这些代码将在运行时执行
  • ASP.NET MVC在使用脚手架生成视图和控制器时在后台使用T4模板

"执行"模板就像一行代码一样简单:

var templateOutput = new MyTemplateClass().TransformText();

还有更高级的选项,例如将参数/变量传递到模板,MSDN中对此有很好的说明。

相关文章:
  • 没有找到相关文章