11# RazorEngineCore
2- NETCore 3.1.4 Razor Template Engine. No legacy code.
2+ NETCore 3.1.5 Razor Template Engine. No legacy code.
33* .NET Standard 2.0
44
55[ ![ NuGet] ( https://img.shields.io/nuget/dt/RazorEngineCore.svg?style=flat-square )] ( https://www.nuget.org/packages/RazorEngineCore )
@@ -24,6 +24,7 @@ Install-Package RazorEngineCore
2424* [ @Raw ] ( https://github.com/adoconnection/RazorEngineCore/wiki/@Raw )
2525* [ @Inject and referencing other assemblies] ( https://github.com/adoconnection/RazorEngineCore/wiki/@Inject-and-referencing-other-assemblies )
2626* [ Switch from RazorEngine cshtml templates] ( https://github.com/adoconnection/RazorEngineCore/wiki/Switch-from-RazorEngine-cshtml-templates )
27+ * [ Azure Functions FileNotFoundException workaround] ( https://github.com/adoconnection/RazorEngineCore/wiki/Azure-Functions-FileNotFoundException-workaround )
2728
2829## Extensions
2930* [ wdcossey/RazorEngineCore.Extensions] ( https://github.com/wdcossey/RazorEngineCore.Extensions )
@@ -32,8 +33,8 @@ Install-Package RazorEngineCore
3233
3334#### Basic usage
3435``` cs
35- RazorEngine razorEngine = new RazorEngine ();
36- RazorEngineCompiledTemplate template = razorEngine .Compile (" Hello @Model.Name" );
36+ IRazorEngine razorEngine = new RazorEngine ();
37+ IRazorEngineCompiledTemplate template = razorEngine .Compile (" Hello @Model.Name" );
3738
3839string result = template .Run (new
3940{
@@ -45,10 +46,11 @@ Console.WriteLine(result);
4546
4647#### Strongly typed model
4748``` cs
49+ IRazorEngine razorEngine = new RazorEngine ();
4850string templateText = " Hello @Model.Name" ;
4951
5052// yeah, heavy definition
51- RazorEngineCompiledTemplate < RazorEngineTemplateBase < TestModel >> template = razorEngine .Compile <RazorEngineTemplateBase <TestModel >>(templateText );
53+ IRazorEngineCompiledTemplate < RazorEngineTemplateBase < TestModel >> template = razorEngine .Compile <RazorEngineTemplateBase <TestModel >>(templateText );
5254
5355string result = template .Run (instance =>
5456{
@@ -65,8 +67,8 @@ Console.WriteLine(result);
6567#### Save / Load compiled templates
6668Most expensive task is to compile template, you should not compile template every time you need to run it
6769``` cs
68- RazorEngine razorEngine = new RazorEngine ();
69- RazorEngineCompiledTemplate template = razorEngine .Compile (" Hello @Model.Name" );
70+ IRazorEngine razorEngine = new RazorEngine ();
71+ IRazorEngineCompiledTemplate template = razorEngine .Compile (" Hello @Model.Name" );
7072
7173// save to file
7274template .SaveToFile (" myTemplate.dll" );
@@ -77,13 +79,13 @@ template.SaveToStream(memoryStream);
7779```
7880
7981``` cs
80- RazorEngineCompiledTemplate template1 = RazorEngineCompiledTemplate .LoadFromFile (" myTemplate.dll" );
81- RazorEngineCompiledTemplate template2 = RazorEngineCompiledTemplate .LoadFromStream (myStream );
82+ IRazorEngineCompiledTemplate template1 = RazorEngineCompiledTemplate .LoadFromFile (" myTemplate.dll" );
83+ IRazorEngineCompiledTemplate template2 = RazorEngineCompiledTemplate .LoadFromStream (myStream );
8284```
8385
8486``` cs
85- RazorEngineCompiledTemplate < MyBase > template1 = RazorEngineCompiledTemplate <MyBase >.LoadFromFile <MyBase >(" myTemplate.dll" );
86- RazorEngineCompiledTemplate < MyBase > template2 = RazorEngineCompiledTemplate <MyBase >.LoadFromStream <MyBase >(myStream );
87+ IRazorEngineCompiledTemplate < MyBase > template1 = RazorEngineCompiledTemplate <MyBase >.LoadFromFile <MyBase >(" myTemplate.dll" );
88+ IRazorEngineCompiledTemplate < MyBase > template2 = RazorEngineCompiledTemplate <MyBase >.LoadFromStream <MyBase >(myStream );
8789```
8890
8991#### Caching
@@ -92,15 +94,15 @@ RazorEngineCore is not responsible for caching. Each team and project has their
9294If you dont have one, use following static ConcurrentDictionary example as a simplest thread safe solution.
9395
9496``` cs
95- private static ConcurrentDictionary < string , RazorEngineCompiledTemplate > TemplateCache = new ConcurrentDictionary <string , RazorEngineCompiledTemplate >();
97+ private static ConcurrentDictionary < int , IRazorEngineCompiledTemplate > TemplateCache = new ConcurrentDictionary <int , IRazorEngineCompiledTemplate >();
9698```
9799
98100``` cs
99101private string RenderTemplate (string template , object model )
100102{
101103 int hashCode = template .GetHashCode ();
102104
103- RazorEngineCompiledTemplate compiledTemplate = TemplateCache .GetOrAdd (hashCode , i =>
105+ IRazorEngineCompiledTemplate compiledTemplate = TemplateCache .GetOrAdd (hashCode , i =>
104106 {
105107 RazorEngine razorEngine = new RazorEngine ();
106108 return razorEngine .Compile (Content );
@@ -141,8 +143,8 @@ output:
141143``` cs
142144string content = @" Hello @A, @B, @Decorator(123)" ;
143145
144- RazorEngine razorEngine = new RazorEngine ();
145- RazorEngineCompiledTemplate < CustomModel > template = razorEngine .Compile <CustomModel >(content );
146+ IRazorEngine razorEngine = new RazorEngine ();
147+ IRazorEngineCompiledTemplate < CustomModel > template = razorEngine .Compile <CustomModel >(content );
146148
147149string result = template .Run (instance =>
148150{
@@ -170,8 +172,8 @@ Keep your templates as simple as possible, if you need to inject "unusual" assem
170172Writing ` @using System.IO ` in template will not reference System.IO assembly, use builder to manually reference it.
171173
172174``` cs
173- RazorEngine razorEngine = new RazorEngine ();
174- RazorEngineCompiledTemplate compiledTemplate = razorEngine .Compile (templateText , builder =>
175+ IRazorEngine razorEngine = new RazorEngine ();
176+ IRazorEngineCompiledTemplate compiledTemplate = razorEngine .Compile (templateText , builder =>
175177{
176178 builder .AddAssemblyReferenceByName (" System.Security" ); // by name
177179 builder .AddAssemblyReference (typeof (System .IO .File )); // by type
0 commit comments