テンプレートエンジン

メールを送信する機能を実装する必要があって、メール本文をテンプレートファイルから生成する機能が欲しかったのでテンプレートエンジンを使う事にした。
で、テンプレートエンジンといえば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文もあるけど、今回は必要ないのでスルー。