将RazorEngine与TextWriter一起使用

时间:2014-01-20 13:44:47

标签: razorengine

我想使用RazorEngine生成一些html文件。首先生成字符串很容易,然后将它们写入文件。但是如果生成的字符串太大,则会导致内存问题。

所以我想知道是否存在使用RazorEngine的非缓存方式,例如使用StreamWriter作为输出而不是字符串。

我谷歌这一段时间,但没有运气。
我认为使用自定义基本模板应该是正确的方法,但是在RazorEngine的官方主页上文档很少(甚至是过时的)。

任何提示都会有所帮助!

1 个答案:

答案 0 :(得分: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