GitHubで公開されているRazorEngineがすごく使いやすかったのでメモメモ。
- RazorEngine
- RazorEngine
以前は、CodePlexで公開されていたのですが現在はGitHubに移行されてます。
RazorEngineを開発されている方のブログ
- var Matt = new Hero();
RazorEngineは、その名前の通りASP.NET MVCのビューエンジンで利用されている
Razor (System.Web.Razor) のエンジン部分を汎用的にしたライブラリです。
汎用的なテンプレートエンジンとして利用できます。
内部で、Razor本体を利用しているのでシンタックスは同じものが利用できます。
テンプレートエンジンでは、StringTemplate.NETなどが有名ですがRazor記法が
利用できるのはやっぱりいいですね。
利用方法はCodePlexのサイトにも記述されているのですが、めっちゃ簡単です。
var template = @"hogehoge @Model.Name..."; var model = new { Name = "hehehehe" }; var result = Razor.Parse(temlate, model);
で結果がとれます。他にもいろいろ機能があるみたいですが
まだ使ってないのでよくわかってません。
RazorEngineはNuGetに対応しているので
Install-Package RazorEngine
で参照設定できます。
とりあえず、単純にテンプレート文字列にモデルの値を展開して出力してみます。
HelloWorldみたいなもの。
namespace HelloRazorEngine { using System; using System.Collections.Generic; using System.Linq; using RazorEngine; class Program { static void Main() { // // RazorEngineは、ASP.NET MVCにて利用されるRazorを内部で // 利用しているラッパーライブラリである。 // // 内部で、System.Web.Razorを利用しているのでシンタックスは同じ。 // 元々のRazorは、HTMLに特化しているが、RazorEngineはそれを // 汎用的に利用できるようにしてくれる。 // // 利用方法は簡単で // Razor.Parse(template, model) // で結果を受け取ることができる。 // var template = @"Hello @Model.Name!!"; var model = new { Name = "RazorEngine" }; var result = Razor.Parse(template, model); Console.WriteLine(result); WaitForAnyKeyInput(); } static void WaitForAnyKeyInput() { Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } }
結果は
Hello RazorEngine!! Press any key to exit...
となります。
ついでに、テンプレートエンジンをよく利用する場面ってことで
メールの文面を出力するサンプル。
あらかじめ、以下のテンプレートを作成して配置しておくとします。
@(Model.Name)様 この度は、@(Model.BlogName)を閲覧いただき、誠にありがとうございます。 サービスのお申し込みが完了いたしました。 ─────────────────────────────────── ■サービス内容■ ─────────────────────────────────── 会員ID...............: @Model.MemberId 申込日...............: @Model.StartDate ─────────────────────────────────── ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■お問い合わせ■ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ・カスタマーサポート @Model.BlogUrl ・メール @Model.MailAddress ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
んで、RazorEngineに食わせます。
namespace UseExternalTemplateFile { using System; using System.Collections.Generic; using System.IO; using System.Linq; using RazorEngine; class Program { static void Main() { const string TemplateFilePath = @"Template/Thankyou.tpl"; var template = File.ReadAllText(TemplateFilePath); var model = new { Name = "gsf.zero1", BlogName = "いろいろ備忘録日記", MemberId = "000001", StartDate = DateTime.Now.ToShortDateString(), BlogUrl = "ttp://d.hatena.ne.jp/gsf_zero1/", MailAddress = "dummy@dummy.com" }; Console.WriteLine(Razor.Parse(template, model)); WaitForAnyKeyInput(); } static void WaitForAnyKeyInput() { Console.WriteLine("Press any key to exit..."); Console.ReadKey(); } } }
いろいろ機能あるみたいなので、勉強しつつメモできたらいいな。
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場