2013-08-15 26 views

risposta

17

Ho provato tutte e 3 le librerie e ho trovato diverse differenze.

  • RazorEngine - il più facile e funziona meglio tra tutti loro, supporta la memorizzazione nella cache per impostazione predefinita.
  • RazorTemplates - non supporta alcune direttive Razor (ad esempio @model) e utilizza molti tipi di dynamic. Può usare modelli precompilati.
  • RazorMachine - molto imprevedibile e con un design strano che richiede l'utilizzo di una singola istanza globale anziché di una classe statica.

Per quanto riguarda me, ho scelto RazorEngine. Anche qui è il codice come utilizzare queste librerie:

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; 

e alcuni test di performance, testato ogni libreria 2 volte sullo stesso modello, tutti hanno prestazioni simili, senza una grande differenza:

RazorEngine - 1731 ms, 0,1 ms

RazorTemplates - 1753 ms , 0,1 ms

RazorMachine - 1608 ms, 0,1 ms

+0

Hai usato la stessa istanza dell'oggetto RazorMachine su più test? Questo dovrebbe essere un singleton a livello di app che gestisce tutta la memorizzazione nella cache e la precompilazione: https://github.com/jlamfers/RazorMachine/wiki/Examples –

+1

@Chris Hynes Sì, il problema è stato risolto perché ho creato una nuova istanza ogni volta, ora ho risolto il codice. Anche se il fatto rimane, la biblioteca funziona in un modo molto inaspettato. – vorrtex

+3

Come funziona RazorEngine con elementi avanzati come modelli, classi di visualizzazione personalizzate, layout, viewstarts, ecc.? RazorMachine, per quanto sia complicata, è l'unica cosa che ho trovato che funzioni effettivamente con l'intera gamma di funzionalità di Razor. Ho creato un paio di classi che funzionano con RazorMachine per fornire un ambiente simile a un rasoio completo con layout, viewstart, ecc., Ma in esecuzione in base a file di risorse incorporati. Questo mi consente di utilizzare gli stessi modelli da un progetto web, un progetto di servizio o ciò che hai. –

0

Uso RazorEngine per la generazione di e-mail e funziona perfettamente. Guardando gli altri 2 progetti sembra che facciano lo stesso come RazorEngine - che ospita MS Razor. Ad ogni modo, puoi raccomandare quest'ultimo per il tuo scopo.

0

Utilizzare, https://github.com/smsohan/MvcMailer è davvero utile per creare e-mail basate su MVC Razor.

+4

** ** Ma solo se si inviano messaggi di posta elettronica dall'applicazione Asp.net MVC. Purtroppo non è possibile utilizzare MvcMailer da una libreria di classi.E in un'applicazione enterprise, le e-mail di solito vengono inviate dal livello aziendale ... Ma è comunque una bella libreria ...;) –

Problemi correlati