2013-08-15 5 views
19

Может кто-то объяснить, каковы различия, плюсы/минусы междуRazorEngine против RazorTemplates против RazorMachine

RazorEngine

RazorTemplates

RazorMachine

мне нужно выбрать один для генерации электронной почты. Требования довольно обычны: быстрая, удобная в использовании. Кажется, что у всех из них есть все возможности, которые мне нужны, но поскольку я новичок Razor, мне не совсем понятно, какой из них лучше.

Спасибо.

ответ

17

Я пробовал все 3 библиотеки самостоятельно и нашел несколько отличий.

  • RazorEngine - самый простой и лучше всего работает среди всех из них, поддерживает кэширование по умолчанию.
  • RazorTemplates - не поддерживает некоторые директивы Razor (например, @model) и использует много типов dynamic. Можно использовать предварительно скомпилированные шаблоны.
  • RazorMachine - очень непредсказуемый и со странным дизайном, который требует использования глобального экземпляра вместо статического класса.

Как мне, я выбрал RazorEngine. Также здесь код, как использовать эти библиотеки:

RazorEngine

string html = Razor.Parse(templateContent, model, templatePath); 

RazorTemplates

if (!_templatesCache.ContainsKey(templatePath)) 
{ 
    var compiledTemplate = Template.Compile(templateContent); 
    _templatesCache.Add(templatePath, compiledTemplate); 
} 

string html = _templatesCache[templatePath].Render(model); 

RazorMachine

private readonly Lazy<RazorMachine> _lazyRazorMachine = 
    new Lazy<RazorMachine>(() => new RazorMachine()); 
//... 

var rm = _lazyRazorMachine.Value; 
string html = rm.ExecuteContent(templateContent, model, null, true).Result; 

и некоторые тесты производительности, тестирование каждой библиотеки 2 раза на одном шаблоне, все они имеют одинаковую производительность без большой разницы:

RazorEngine - 1731 мс, 0,1 мс

RazorTemplates - 1753 мс , 0,1 мс

RazorMachine - 1608 мс, 0,1 мс

+0

Использовал ли вы тот же экземпляр объекта RazorMachine для нескольких тестов? Предполагается, что это синглтон уровня приложения, который управляет всеми кешированием и прекомпиляцией: https://github.com/jlamfers/RazorMachine/wiki/Examples –

+1

@Chris Hynes Да, оказалось, что проблема была в том, что я создал новый экземпляр каждый раз, теперь я исправил код. Хотя факт остается фактом, библиотека работает очень неожиданно. – vorrtex

+3

Как работает RazorEngine с продвинутыми файлами, такими как модели, пользовательские классы просмотра, макеты, окна просмотра и т. Д.? RazorMachine, как бы то ни было, это единственное, что я нашел, которое действительно работает с полной гаммой функций Razor. Я собрал пару классов, которые работают с RazorMachine, чтобы создать полноценную среду Razor с макетами, viewstart и т. Д., Но работать на основе встроенных файлов ресурсов. Это позволяет мне использовать те же шаблоны из веб-проекта, сервисного проекта или того, что у вас есть. –

0

Я использую RazorEngine для генерации электронной почты, и он работает отлично. Глядя на другие 2 проекта, похоже, они делают то же самое, что и RazorEngine - хостинг MS Razor. В любом случае, вы можете рекомендовать последнее для своей цели.

0

Использование, https://github.com/smsohan/MvcMailer Это действительно помогает при создании писем на основе MVC Razor.

+4

** Но только ** если вы отправлять электронную почту из вашего приложения Asp.net MVC. К сожалению, нельзя использовать MvcMailer из библиотеки классов.И в корпоративном приложении электронные письма обычно отправляются с бизнес-уровня ... Но это хорошая библиотека, хотя ...;) –

Смежные вопросы