Генерация почты из шаблона

#c# #.net #razorengine

#c# #.net #razorengine

Вопрос:

История

Я хочу сгенерировать почту из шаблона.

Шаблон будет выглядеть примерно так:

 <h1>@Model.Name</h1>
@foreach(var row in Model.Rows)
{
    <p>@row</p>
}
@if(Model.Case)
{
    <p>Thats the case</p>
} 
  

Эти шаблоны хранятся в базе данных, у каждого пользователя их несколько (~ 10), и они могут быть изменены.

До сих пор мы использовали RazorEngine, мы просто всегда вызывали Razor.Parse() . У нас это работало нормально, пока у нас не возникли проблемы с дисковым пространством. (Parse() генерирует новую сборку при каждом вызове во временной папке, поэтому их довольно много)


Что я пробовал

Итак, я подумал, что мне нужно переключиться на использование новых функций RazorEngines Compile(), Run(), RunCompile() думая, что можно будет скомпилировать шаблон (присвоив ему DB-Id в качестве ключа шаблона), когда будут внесены изменения, поэтому у меня была только одна сборка на шаблон. Затем я бы вызвал ‘Run()’, когда мне понадобится почта с данными. Но это невозможно. Другой проблемой может быть утечка памяти, потому что каждая сборка шаблона останется в кэше.

Мы также рассмотрели stringtemplate.org (состояние разработки c # выглядит не очень хорошо) и Microsoft использует MailDefinition (может использоваться только для переменных, не поддерживает циклы …)


Что я ищу

По сути, я ищу RazorEngine, который ничего не кэширует. Я использовал Razor.Parse() и у меня не было никаких проблем с производительностью.

Есть ли настройка в RazorEngine, которую я не видел, для отключения кэширования? Есть ли альтернатива RazorEngine, которая это делает? Или есть даже другой метод генерации писем из шаблона?

Ответ №1:

Вы заглядывали в текстовые шаблоны T4? Вы можете создавать текстовые шаблоны во время разработки или во время выполнения, которые «компилируются» с чем угодно. Несколько примеров этого в реальном мире:

  • Entity Framework использует их для создания ваших файлов модели C # (.cs)
  • Вы можете использовать шаблоны T4 для генерации .файлы sql (или просто операторы SQL), содержащие код C # (переменные, условия и т.д.), Который выполняется во время выполнения
  • ASP.NET MVC использует шаблоны T4 за кулисами при создании представлений и контроллеров с использованием строительных лесов

«Выполнить» шаблон так же просто, как одну строку кода:

 var templateOutput = new MyTemplateClass().TransformText();
  

Существуют более продвинутые опции, такие как передача параметров / переменных в шаблон, которые хорошо документированы в MSDN.