#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.