Я изучаю, используя dotliquid, чтобы заменить домашний код шаблона, и мне интересно, как лучше всего достичь моей цели.DotLiquid, некоторые вопросы/наблюдения начинающего
Старый код, используемый для использования сигил в шаблоне и вместе с Словарем, использовал регулярные выражения для поиска и замены. Таким образом, вы сделали что-то вроде этого в файле шаблона:
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 }));
Несколько вопросов:
- Является ли это правильный способ сделать это? Если это так, я предлагаю сделать дополнение к документам, демонстрирующим эту функциональность.
2. Во-вторых, в шаблоне, который я использую, мне нужно квалифицировать заполнители с именем переменной как это?
Specific error: {{emailTemplateInfo.ErrorId}}
Error description: {{emailTemplateInfo.Description}}
Additional information:{{emailTemplateInfo.AdditionalInformation}}
3. я не могу видеть, как декларация именования [Template.NamingConvention = new CSharpNamingConvention();
] в связи с шаблоном описания переменных ниже него. Существует ли какое-то глобальное кэширование?
Re 1. Это хорошо, потому что я сохраняю свои модели отдельно, и теперь им не нужна ссылка на DotLiquid. Протестировано и работает - спасибо Re 2. - любые примеры этого в модульных тестах Re 3. - Как «шаблон» (строчный) знает, что он должен использовать соглашение C# над Ruby? Существует ли какое-то глобальное кэширование? – noonand
Re (2), я обновил свой ответ, включив ссылку на пример использования 'Hash.FromDictionary'. Re (3), 'Шаблон.NamingConvention' является статическим свойством, поэтому он глобальный. Не отличный дизайн API, но в моей защите DotLiquid был моим первым проектом с открытым исходным кодом, я действительно не знал, что делаю :) –
Тим, спасибо большое, я ценю все усилия, которые вы поставили (и продолжайте положить) в этот проект. Он делает все, о чем я просил, и мелочи, такие как статическая опора, (IMHO) несущественны. Оцените свою помощь и по этому вопросу. – noonand