我正在調查使用dotliquid來取代一個家庭成長的模板代碼片段,我想知道實現我的目標的最佳方法。DotLiquid,一些初學者的問題/觀察
舊代碼用於在模板中使用sigils,並與Dictionary一起使用正則表達式進行搜索和替換。所以,你沒有在模板文件是這樣的:
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,它似乎相當強大的(可能是矯枉過正的我的需要?)。我有它的工作,但我想問一下,如果我以正確的方式去解決這個問題?
看來我被迫宣佈一個類即viz。
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. - 「template」(小寫)如何知道它是使用C#約定而不是Ruby?是否有某種全局緩存正在進行? – noonand
Re(2),我已經更新了我的答案,以包含一個指向'Hash.FromDictionary'示例用法的鏈接。 Re(3),'Template。NamingConvention'是一個靜態屬性,所以它是全球性的。不是一個很好的API設計,但在我的防守DotLiquid是我的第一個開源項目,我真的不知道我在做什麼:) –
蒂姆,非常感謝,我感謝你所付出的所有努力(並繼續放入)這個項目。它完成了我所要求的一切,像靜態支柱這樣的小事物(恕我直言)是微不足道的。感謝您對這個問題的幫助。 – noonand