【问题标题】:Generating mail from template从模板生成邮件
【发布时间】:2016-10-19 11:50:07
【问题描述】:

故事

我想从模板生成邮件。

模板看起来类似于:

<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# 开发状态看起来不太好)和 Microsoft 的 MailDefinition(只能用于变量,不支持循环...)


我在寻找什么

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

我没有看到 RazorEngine 中是否有禁用缓存的设置?是否有替代 RazorEngine 的替代方案?还是有其他方法可以从模板生成邮件?

【问题讨论】:

    标签: c# .net razorengine


    【解决方案1】:

    你看过T4 Text Templates吗?您可以构建“编译”为任何内容的 design-timerun-time 文本模板。现实世界中的几个例子:

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

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

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

    还有更高级的选项,例如将参数/变量传递给模板,这在 MSDN 中有很好的记录。

    【讨论】:

      猜你喜欢
      • 2013-04-08
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-08
      相关资源
      最近更新 更多