Я пробовал все 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 мс
Использовал ли вы тот же экземпляр объекта RazorMachine для нескольких тестов? Предполагается, что это синглтон уровня приложения, который управляет всеми кешированием и прекомпиляцией: https://github.com/jlamfers/RazorMachine/wiki/Examples –
@Chris Hynes Да, оказалось, что проблема была в том, что я создал новый экземпляр каждый раз, теперь я исправил код. Хотя факт остается фактом, библиотека работает очень неожиданно. – vorrtex
Как работает RazorEngine с продвинутыми файлами, такими как модели, пользовательские классы просмотра, макеты, окна просмотра и т. Д.? RazorMachine, как бы то ни было, это единственное, что я нашел, которое действительно работает с полной гаммой функций Razor. Я собрал пару классов, которые работают с RazorMachine, чтобы создать полноценную среду Razor с макетами, viewstart и т. Д., Но работать на основе встроенных файлов ресурсов. Это позволяет мне использовать те же шаблоны из веб-проекта, сервисного проекта или того, что у вас есть. –