1
我有一個返回實體領域的動態列表對象的網絡服務訪問命名空間。目前Web服務可以返回實體,但是我想讓它更簡單,並允許客戶端提供一個模板字符串,我使用該實體解析並返回結果。
下面是一個例子:
var entity = new Entity();
entity.Fields.Add("status", "worked");
var template = "My template parser {{status}}!";
var result = service.ParseTemplate(template, entity);
// Expected result is "My template parser worked!"
這一點我能做到使用一個簡單的正則表達式。然後我決定我需要一些基本的邏輯,比如for循環和if語句。我決定使用Cottle,這是一個很好的開源模板引擎。不幸的是,隨着我的實體變得越來越複雜,這不會削減它。這裏是我想要做的事情的那種:
var entity = new Entity();
entity.Fields.Add("name", "Bob");
var entity2 = new Entity();
entity2.Fields.Add("status", "worked");
entity2.Fields.Add("person", entity);
var template = "My name is {{person.name}}. My template parser {{status}}!";
var result = service.ParseTemplate(template, entity2);
// Expected result is "My name is Bob. My template parser worked!"
正如你所看到的,第二個例子允許基於點語法找到實體連接並讀取其領域也是如此。
現在到了問題的肉...
我決定,剃鬚刀能夠做到什麼,我期待使用RazorEngine項目。然而,我很猶豫邀請人們向我發送一個充滿服務器端代碼的模板,原因很明顯。有沒有一種方法可以解析模板,同時刪除對整個.Net庫的訪問?
替代問題
是否有更好的模板解決方案,在那裏,任何人都可以推薦嗎?