2009-02-20 23 views
5

Tenemos un conjunto de plantillas NVelocity en recursos integrados que usamos para correos electrónicos. Queremos mover estas plantillas al DB para que los usuarios puedan configurarlas fácilmente.¿NVelocity ya no es compatible con plantillas de cadenas?

Parece que NVelocity (puerto Castle) no admite cadenas como plantillas. Alguien sabe como hacerlo.

Para que quede claro que esto es lo que quiero hacer (sintaxis puede ser inexacta, voy por la memoria) ...

string templateString = "Hello $!user"; 
Template template = new Template(templateString); 
string results = template.Merge(....); 

Respuesta

15

Esto funciona para mí:

using System.Collections; 
using System.IO; 
using NUnit.Framework; 
using NVelocity; 
using NVelocity.App; 

[Test] 
public void StringParsing() 
{ 
    var h = new Hashtable { 
     { "foo", "Template" }, 
     { "bar", "is working" }, 
     { "foobar", new[] { "1", "2", "3" } } }; 
    Velocity.Init(); 
    var c = new VelocityContext(h); 
    var s = new StringWriter(); 
    Velocity.Evaluate(c, s, "", 
     "$foo $bar: #foreach ($i in $foobar)$i#end"); 
    Assert.AreEqual("Template is working: 123", s.ToString()); 
} 
+0

La falta de una buena documentación para NVelocity es deprimente porque es una biblioteca tan poderosa y útil. Me ha llevado demasiado tiempo encontrar su respuesta, por lo que marqué la pregunta como favorita para futuras referencias y hasta voté su respuesta y la pregunta. –

+0

Gracias. Sin embargo, creo que es una buena idea mirar otros motores de plantillas, ya que NVelocity está a punto de ser abandonado, bastante lento y demasiado limitado. – Bergius

Cuestiones relacionadas