Kephas.Templating.Razor
11.0.0-dev.6
Prefix Reserved
See the version list below for details.
dotnet add package Kephas.Templating.Razor --version 11.0.0-dev.6
NuGet\Install-Package Kephas.Templating.Razor -Version 11.0.0-dev.6
<PackageReference Include="Kephas.Templating.Razor" Version="11.0.0-dev.6" />
paket add Kephas.Templating.Razor --version 11.0.0-dev.6
#r "nuget: Kephas.Templating.Razor, 11.0.0-dev.6"
// Install Kephas.Templating.Razor as a Cake Addin #addin nuget:?package=Kephas.Templating.Razor&version=11.0.0-dev.6&prerelease // Install Kephas.Templating.Razor as a Cake Tool #tool nuget:?package=Kephas.Templating.Razor&version=11.0.0-dev.6&prerelease
Razor Templating
Introduction
This package provides the implementation of templating using Razor syntax and *.cshtml files.
The cshtml
template kind is handled by the RazorTemplatingEngine
.
Check the following packages for more information:
Usage
Example of a template: template.cshtml file
@model TemplateModel
<div>Hi @Process(Model.Name)!</div>
@functions {
private string Process(string str)
{
return $"@{str}@";
}
}
Example of code using this template
- File based template processing
record TemplateModel(string Name);
// normally you would get the processor injected into the service constructor.
var processor = injector.Resolve<ITemplateProcessor>();
var result = processor.Process(new FileTemplate("C:\\Path\\To\\template.cshtml"), new TemplateModel("Johnny"));
Assert.Equals("<div>Hi @Johnny@!</div>\r\n", result);
// this is a simpler alternative for Razor file templates.
var result = processor.ProcessWithFile("C:\\Path\\To\\template.cshtml", new TemplateModel("Johnny"));
Assert.Equals("<div>Hi @Johnny@!</div>\r\n", result);
- String based template processing
record TemplateModel(string Name);
// normally you would get the processor injected into the service constructor.
var processor = injector.Resolve<ITemplateProcessor>();
var template = @"
@model TemplateModel
<div>Hi @Process(Model.Name)!</div>
@functions {
private string Process(string str)
{
return $""@{str}@"";
}
}
";
var result = processor.ProcessWithRazor(template, new TemplateModel("Johnny"));
Assert.Equals("<div>Hi @Johnny@!</div>\r\n", result);
Fine tuning the template processing
By default, the following directives are supported by the templating engine:
- Namespace
- Functions
- Inherits
- Section
- Model
For further engine builder configuration, this can be achieved in two ways:
- Provide a configuration lambda expression when invoking the processing.
- This is a very handy solution but it is not scalable. If there are a lot of templates to process it is error prone to specify the configuration with each processing invocation.
- Use a
ITemplatingProcessingBehavior
implementation.- This is an advanced solution. Override the
BeforeProcessAsync
method and add the engine configuration here. Although it has a more general character, the changes here can only be overwritten either by another behavior with less priority or with an explicit[Override]
annotation.
- This is an advanced solution. Override the
Example with lambda configuration
var processor = injector.Resolve<ITemplateProcessor>();
var result = await processor.ProcessAsync(
new FileTemplate("C:\\Path\\To\\template.cshtml"),
new TemplateModel("Johnny"),
ctx => {
PageDirective.Register(builder);
});
Assert.Equals("<div>Hi @Johnny@!</div>\r\n", result);
Example with a template processing behavior
[TemplateKind(RazorTemplatingEngine.Cshtml)]
public class AddPageTemplateProcessingBehavior : ITemplateProcessingBehavior
{
/// <summary>
/// Interception invoked before the template is processed.
/// It adds also the PageDirective to the engine.
/// </summary>
/// <param name="processingContext">Information describing the processing.</param>
/// <param name="token">The cancellation token.</param>
/// <returns>
/// The asynchronous result.
/// </returns>
public Task BeforeProcessAsync(ITemplateProcessingContext processingContext, CancellationToken token)
{
var existingConfig = processingContext.ConfigureEngine();
processingContext.ConfigureEngine(engine =>
{
existingConfig?.Invoke(engine);
PageDirective.Register(engine);
});
return Task.CompletedTask;
}
}
Additional services
All the enumerated services provide a default implementation which can be overridden if required. However, this should be rarely needed, instead configure the template generation
IMetadataReferenceManager
This internal service is used to provide MetadataReference
s out of a list of assemblies.
IRazorProjectFileSystemProvider
Based on the template and the processing context, this service should provide a RazorProjectFileSystem
used by the renderer.
The default implementation SimpleRazorProjectFileSystemProvider
uses a simple strategy which handles a single template file without any additional template references.
IRazorProjectEngineFactory
Creates the Razor project engine for the provided file system and with the given context.
IRazorPageGenerator
Generates the C# code based on the provided project engine and item.
IRazorPageCompiler
Compiles the template with model type T
and returns a ICompiledRazorPage<T>
wrapped into an operation result.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Kephas.Templating (>= 11.0.0-dev.6)
- Microsoft.AspNetCore.Mvc.Razor.Extensions (>= 6.0.1)
- Microsoft.AspNetCore.Razor.Language (>= 6.0.1)
- Microsoft.CodeAnalysis.CSharp (>= 4.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
11.1.0 | 498 | 4/13/2022 |
11.1.0-dev.4 | 134 | 4/6/2022 |
11.1.0-dev.3 | 117 | 3/30/2022 |
11.1.0-dev.2 | 125 | 3/23/2022 |
11.1.0-dev.1 | 119 | 3/23/2022 |
11.0.0 | 450 | 3/11/2022 |
11.0.0-dev.7 | 127 | 3/7/2022 |
11.0.0-dev.6 | 123 | 2/28/2022 |
11.0.0-dev.5 | 125 | 2/26/2022 |
11.0.0-dev.4 | 130 | 2/24/2022 |
11.0.0-dev.3 | 129 | 2/23/2022 |
11.0.0-dev.2 | 127 | 2/18/2022 |
Please check https://github.com/kephas-software/kephas/releases for the change log.
Also check the documentation and the samples from https://github.com/kephas-software/kephas/wiki and https://github.com/kephas-software/kephas/tree/master/Samples.