1

RazorEngine を使用していくつかの html ファイルを生成したいと考えています。最初に文字列を生成してからファイルに書き込むのは簡単です。ただし、生成された文字列が大きすぎると、メモリの問題が発生します。

StreamWriterしたがって、文字列ではなく出力として使用するなど、キャッシュされていない RazorEngine を使用する方法があるのではないかと思います。

私はこれをしばらくグーグルで検索しましたが、運がありません。
カスタム ベース テンプレートを使用するのが正しい方法だと思いますが、RazorEngine の公式ホームページにはドキュメントがほとんどありません (古くてもあります)。

どんなヒントでも役に立ちます!

4

1 に答える 1

1

わかった。私はそれを考え出した。

を継承するクラスを作成し、コンストラクターでパラメーター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.txtHello WAKU.

于 2014-01-22T12:40:13.377 に答える