Я изучаю вопрос об использовании dotliquid для замены собственного фрагмента кода шаблона, и мне интересно, как лучше всего достичь моей цели.
Старый код использовал сигилы в шаблоне и, вместе со словарем, использовал регулярные выражения для поиска и замены. Итак, вы сделали что-то вроде этого в файле шаблона:
Specific error: {#ErrorId#}
Error description: {#Description#}
Additional information:{#AdditionalInformation#}
И в коде С#:
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 }));
Несколько вопросов:
Это правильный способ сделать это? Если это так, то я предлагаю сделать дополнение к документам, демонстрирующее эту функциональность.
Во-вторых, в шаблоне, который я использую, мне нужно квалифицировать заполнители с именем переменной, как это?
Specific error: {{emailTemplateInfo.ErrorId}} Error description: {{emailTemplateInfo.Description}} Additional information:{{emailTemplateInfo.AdditionalInformation}}
Я не вижу, как объявление соглашения об именах [
Template.NamingConvention = new CSharpNamingConvention();
] связано с объявлением переменной шаблона под ним. Происходит ли какое-то глобальное кэширование?