Table of Contents

Templating (Scriban)

Render Scriban templates from inline strings or registered named templates against a model.

What you'll build

A host that resolves ITemplateRenderer (SquidStd.Templating), renders an inline template against a model, then registers a named template and renders it by name.

Prerequisites

  • .NET 10 SDK
  • dotnet add package SquidStd.Templating
  • No external infrastructure required

Steps

1. Register templating


bootstrap.ConfigureServices(container => container.RegisterCoreServices().AddTemplating());

2. Render an inline template

RenderAsync compiles and renders an ad-hoc template string against a model; properties are resolved with the Scriban {{ ... }} syntax.


var renderer = bootstrap.Resolve<ITemplateRenderer>();

var greeting = await renderer.RenderAsync("Hi {{ user.name }}!", new { User = new { Name = "squid" } });

Console.WriteLine(greeting);

3. Register and render a named template

Register compiles and caches a template under a name; RenderByNameAsync renders it later without recompiling.


renderer.Register("welcome", "Welcome aboard, {{ user.name }}.");

var welcome = await renderer.RenderByNameAsync("welcome", new { User = new { Name = "squid" } });

Console.WriteLine(welcome);

Run it

dotnet run --project samples/SquidStd.Samples.Templating

Prints Hi squid! then Welcome aboard, squid..

How it works

ITemplateRenderer wraps the Scriban engine: RenderAsync handles one-off templates, while Register plus RenderByNameAsync lets you compile a template once and reuse it by name. The model is bound by property name using Scriban's case-insensitive member access.

See also