首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RazorEngine与TextWriter的结合

RazorEngine与TextWriter的结合
EN

Stack Overflow用户
提问于 2014-01-20 13:44:47
回答 1查看 393关注 0票数 1

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

因此,我想知道是否有一种使用RazorEngine的非缓存方式,比如使用StreamWriter作为输出而不是字符串。

我在谷歌上搜索了一段时间,但没有运气。

我认为使用自定义基础模板应该是正确的方法,但是RazorEngine官方主页上的文档太少了(甚至过时了)。

任何提示都会有帮助的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-22 12:40:13

好的。我想通了。

创建继承TemplateBase<T>的类,并在构造函数中接受TextWrite参数。

代码语言:javascript
复制
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);
    }
}

然后使用模板如下:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21235662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档