Механизм шаблонизации строк для .Net - PullRequest
2 голосов
/ 10 февраля 2009

Я столкнулся с необходимостью иметь возможность хранить шаблонизированный контент отдельно от кода, который генерирует динамические поля, которые заполняют этот контент (например, слияние почты в слове). Вариант использования обычно основан на том факте, что я хочу написать код, который может отправлять динамический контент определенного типа (часто по электронной почте), который я хочу разрешить пользователям настраивать без изменения кода.

Например, мы отправляем электронные письма нашим клиентам. В конечном итоге мы настраиваем отправляемые электронные письма и добавляем динамический контент (например, мы можем захотеть сказать «Уважаемый {Contact.FirstName}»). Удобно выбросить формат этих электронных писем в базу данных или какой-нибудь XML-файл и написать код, который присваивает ему значения всех свойств отдельно. Поэтому создайте Email.XML с содержимым, и механизм, который принимает этот XML-файл, передает ему объект Contact и возвращает HTML-код электронной почты. Концептуально это довольно похоже на цель разделения слоя представления в шаблоне MVC (в данном случае электронная почта является представлением, механизм является контроллером, а объект Contact является моделью).

Похоже, что в пространстве .Net есть два претендента (оба порта java) (здесь больше , но они довольно нишевые игроки).

Кто-нибудь использовал один из этих или других шаблонизаторов? Какие ключевые различия между ними я должен учитывать при выборе

Ответы [ 2 ]

2 голосов
/ 10 февраля 2009

Я использовал StringTemplate.NET и наслаждался опытом. Потребовалось немного времени, чтобы приспособиться к их мировоззрению - такие вещи, как циклы, поначалу кажутся загадочными. Не позволяя шаблонам обращаться к коду, это противоречит большинству других библиотек шаблонов. Но как только вы к этому привыкнете, их решения обретут смысл и станут естественными.

0 голосов
/ 10 февраля 2009

Я просто использовал RegEx.Replace и для каждого совпадения, которое я нашел между {и}, я искал тег в словаре <,> и выполнял ITagParser.

Уважаемый {Приветствие} {FamilyName}

Текущая дата: {Сейчас = гггг-мм-дд}

Где = является необязательным форматом.

Это было слишком мало для оправдания сторонней библиотеки.

...