我想使用RazorEngine生成一些html文件。首先生成字符串,然后将它们写入文件是很容易的。但是,如果生成的字符串太大,将导致内存问题。
因此,我想知道是否有一种使用RazorEngine的非缓存方式,比如使用StreamWriter作为输出而不是字符串。
我在谷歌上搜索了一段时间,但没有运气。
我认为使用自定义基础模板应该是正确的方法,但是RazorEngine官方主页上的文档太少了(甚至过时了)。
任何提示都会有帮助的!
发布于 2014-01-22 12:40:13
好的。我想通了。
创建继承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。
https://stackoverflow.com/questions/21235662
复制相似问题