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.