下面講的都是一些其首頁上面的例子,是以請大家别拍磚。别後面想到有些實際意義的例子在寫個具體的運用例子吧。

代碼
public static class razor
{
public static string parse(string template, string name = null);
public static string parse<t>(string template, t model, string name = null);
public static void setlanguageprovider(ilanguageprovider provider);
public static void setmarkupparser(markupparser parser);
public static void settemplatebasetype(type type);
}

在razor這個靜态類中最重要的方法當然是我們的parse方法了,其有兩個重載,在第二個重載在我們可以傳入template的model,了解asp.net mvc都會知道這個model。同時我們可以用setlanguageprovider方法傳入languageprovider(c#、vb)等,settemplatebasetype傳入模闆basetype(可能是我們的自定義類型)。
1:先來個簡單的template:

static void main(string[] args)
{
string template = "hello @model.name! welcome to razor!";
string result = razor.parse(template, new { name = "world" });
console.writeline(result);
console.read();
}

輸出結果:
hello world! welcome to razor!
在這裡我們傳入的是new { name = "world" }的匿名對象的model。
2:内部嵌套方法:

string template = @"@helper mymethod(string name) {
hello @name
@mymethod(model.name)! welcome to razor!";
string result = razor.parse(template, new { name = "world" });

輸出同樣是上邊的結果,但是注意這裡的與上面不同的是在{}中間的空格等是不會忽略的。我的了解是同樣是一個模闆的形式吧。
3:傳遞模闆參數:
在傳遞參數的情況下我們可以采用自定義類,繼承至templatebase 或者templatebase<t>,後者是帶model的情形。
還是官方的例子來看看,

{
razor.settemplatebasetype(typeof(mycustomtemplatebase<>));
string template = "my name in upper case is: @touppercase(model.name)";
string result = razor.parse(template, new { name = "matt" });
console.writeline(result);
console.read();
}
}
public abstract class mycustomtemplatebase<t> : templatebase<t>
public string touppercase(string name)
return name.toupper();

輸出結果為:my name in upper case is: matt。
在我們的mycustomtemplatebase<t>抽象類中我們可以像mvc一樣定義一些輔助屬性和方法,像html、request、response等輔助類等
有事我們需要自定義一些非modle的非static property給template,我的考慮是在templateservice 中的重寫parse方法中初始化action:
public string parse<t>(string template, t model, string name = null,action<itemplate<dynamic>> initaction);