我像这样使用剃须刀引擎:
public class EmailService : IService
{
private readonly ITemplateService templateService;
public EmailService(ITemplateService templateService)
{
if (templateService == null)
{
throw new ArgumentNullException("templateService");
}
this.templateService = templateService;
}
public string GetEmailTemplate(string templateName)
{
if (templateName == null)
{
throw new ArgumentNullException("templateName");
}
Assembly assembly = Assembly.GetAssembly(typeof(EmailTemplate));
Stream stream = assembly.GetManifestResourceStream(typeof(EmailTemplate), "{0}.cshtml".FormatWith(templateName));
string template = stream.ReadFully();
return template;
}
public string GetEmailBody(string templateName, object model = null)
{
if (templateName == null)
{
throw new ArgumentNullException("templateName");
}
string template = GetEmailTemplate(templateName);
string emailBody = templateService.Parse(template, model, null, null);
return emailBody;
}
}
我使用的模板服务是注入的,尽管它只是一个默认实现:
internal ITemplateService InstanceDefaultTemplateService()
{
ITemplateServiceConfiguration configuration = new TemplateServiceConfiguration();
ITemplateService service = new TemplateService(configuration);
return service;
}
因为在这种情况下,我将特别从这些模板构建电子邮件。我希望能够将@section
s 用于 email'a 主题和电子邮件正文的不同部分,同时使用我指定整个电子邮件结构共有的样式的布局(看起来像MailChimp的一个大概)。
那么问题是双重的:
- 如何在 中指定布局
RazorEngine
? - 如何从字符串(或流)中指定这些布局?如您所见,我使用嵌入式资源来存储剃刀电子邮件模板。
更新
也许我不清楚,但我指的是RazorEngine库。