2009-02-20 4 views
5

У нас есть куча шаблонов NVelocity во встроенных ресурсах, которые мы используем для писем. Мы хотим переместить эти шаблоны в БД, чтобы пользователи могли легко настраивать их.NVelocity больше не поддерживает строковые шаблоны?

Кажется, что NVelocity (порт замка) не поддерживает строки в качестве шаблонов. Кто-нибудь знает как это делать.

Чтобы быть ясно, что это то, что я хочу сделать (синтаксис может быть неточным, я буду по памяти) ...

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

ответ

15

Это работает для меня:

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

Отсутствие хорошей документации для NVelocity удручает, потому что это такая мощная и полезная библиотека. Мне потребовалось слишком много времени, чтобы найти ответ, поэтому я поставил вопрос в качестве фаворита для будущей справки и проголосовал за ваш ответ и вопрос. –

+0

Спасибо. Тем не менее, я думаю, что неплохо смотреть на другие механизмы шаблонов, поскольку NVelocity близок к заброшенным, довольно медленным и слишком ограниченным. – Bergius

0

После долгих исследований на мой собственный порт Замок NVelocity походит это было бы огромным PITA, чтобы получить шаблон из строки в памяти.

С тех пор я отказался от NVelocity и начал использовать StringTemplate. В частности, эта реализация: http://websitelogic.net/articles/MVC/stringtemplate-viewengine-asp-net-mvc/

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