テンプレートエンジン
メールを送信する機能を実装する必要があって、メール本文をテンプレートファイルから生成する機能が欲しかったのでテンプレートエンジンを使う事にした。
で、テンプレートエンジンといえばNVelocityという事になるんやけど、見た感じ開発がストップ(確か0.4.2)してるみたいなので将来性のあるStringTemplate(現在バージョン3.0.1)を使う事にする。
以下のサイトからダウンロード
http://www.stringtemplate.org/download.html
とりあえず
「hello.st」というファイル名でテンプレートファイルを作る。
Hello, $value$
この$記号で囲んだ名前がStringTemplateの属性名となる。
次にこのテンプレートに値を流し込むコードを記述する。
static class Program { static void Main() { StringTemplate template; using(StreamReader sr = new StreamReader("hello.st")) { template = new StringTemplate(sr.ReadToEnd()); } template.SetAttribute("value", "World"); Console.WriteLine(template.ToString()); } }
出力
> Hello, World
StringTemplateクラスのインスタンスを作成して、それに属性を設定してToString()で文字列を取得するだけ。テンプレートを読み込む方法は他にもあるけど、これが一番簡単。
繰り返し
次は繰り返し文。構文は以下のようになる。
$コレクション:{コレクションの各要素|
テンプレート
}$
以下のようにテンプレートを記述する。
$values:{value| Hello, $value$ }$
値を流し込むコード
static class Program { static void Main() { StringTemplate template; using(StreamReader sr = new StreamReader("hello.st")) { template = new StringTemplate(sr.ReadToEnd()); } string[] values = { "Hoge", "HogeHoge" }; template.SetAttribute("values", values); Console.WriteLine(template.ToString()); } }
出力
> Hello, Hoge
> Hello, HogeHoge
他にもif文もあるけど、今回は必要ないのでスルー。