我正在研究如何使用斑点液替换本地开发的模板代码,我想知道实现目标的最佳方法。
旧代码通常在模板中使用sigils,并与字典一起使用regexes搜索和替换。所以你在模板文件中做了这样的事情:
Specific error: {#ErrorId#}
Error description: {#Description#}
Additional information:{#AdditionalInformation#}在C#代码中:
Dictionary<string, string> tokensAndValues = new Dictionary<string, string>
{
{@"ErrorId", errorId},
{@"Description", description},
{@"AdditionalInformation", additionalInformation}
};我偶然发现了dotnetliquid,它看起来相当强大(可能会满足我的需求)。我让它起作用了,但我想问一下,我是否要用正确的方式来做这件事?
看来我不得不声明一个类,即。
public class EmailTemplateInfo : Drop
{
public string ErrorId { get; set; }
public string Description { get; set; }
public string AdditionalInformation { get; set; }
}然后按以下方式使用:
Template.NamingConvention = new CSharpNamingConvention();
Template template = Template.Parse(templateText);
EmailTemplateInfo emailTemplateInfo = new EmailTemplateInfo
{
AdditionalInformation = additionalInformation,
Description = description,
ErrorId = errorId
};
string htmlText = template.Render(Hash.FromAnonymousObject(new {emailTemplateInfo = emailTemplateInfo }));几个问题:
Template.NamingConvention = new CSharpNamingConvention();是如何与它下面的模板变量声明相关联的。是否正在进行某种全局缓存?发布于 2017-02-13 13:36:09
Drop继承是一种方法。DotLiquid提供的另一种机制是Template.RegisterSimpleType(...) --参见单元测试中的示例。Hash,其中包含用于AdditionalInformation、Description、ErrorId的顶级键,并将其传递给template.Render(...)。您可以使用Hash.FromDictionary(...)实现这一点,如这里所示。RubyNamingConvention,则需要在模板中编写{{ emailTemplateInfo.additional_information }}。https://stackoverflow.com/questions/42110717
复制相似问题