2014-01-20 19 views
1

我想使用RazorEngine生成一些html文件。首先生成字符串很容易,然後將它們寫入文件。但是如果生成的字符串太大,那會導致內存問題。
使用RazorEngine和TextWriter

所以我不知道是否有一種非緩存的方式來使用RazorEngine,就像使用StreamWriter作爲它的輸出而不是字符串。

我谷歌這一段時間,但沒有運氣。
我認爲使用自定義的基本模板應該是正確的方式,但是RazorEngine的官方主頁上的文檔很少(甚至是過時的)。

任何提示都會有所幫助!

回答

0

好的。我想到了。

創建一個繼承TemplateBase<T>的類,並在構造函數中使用TextWrite參數。

public class TextWriterTemplate<T> : TemplateBase<T> 
{ 
    private readonly TextWriter _tw; 

    public TextWriterTemplate(TextWriter tw) 
    { 
     _tw = tw; 
    } 

    // override Write and WriteLiteral methods, write text using the TextWriter. 
    public override void Write(object value) 
    { 
     _tw.Write(value); 
    } 

    public override void WriteLiteral(string literal) 
    { 
     _tw.Write(literal); 
    } 
} 

然後使用模板,因爲這:

private static void Main(string[] args) 
{ 
    using (var sw = new StreamWriter(@"output.txt")) 
    { 
     var config = new FluentTemplateServiceConfiguration(c => 
      c.WithBaseTemplateType(typeof(TextWriterTemplate<>)) 
       .ActivateUsing(context => (ITemplate)Activator.CreateInstance(context.TemplateType, sw)) 
      ); 
     using (var service = new TemplateService(config)) 
     { 
      service.Parse("Hello @Model.Name", new {Name = "Waku"}, null, null); 
     } 
    } 
} 

output.txt內容應Hello WAKU