使用新的RazorEngine API进行模板化

前段时间,使用RazorEngine渲染模板非常简单:

 string s = RazorEngine.Razor.Parse() 

然而,由于某种原因,其作者改变了关于API的思想,现在渲染模板的最简单的方法是:

 var key = new RazorEngine.Templating.NameOnlyTemplateKey("EmailTemplate", RazorEngine.Templating.ResolveType.Global, null); RazorEngine.Engine.Razor.AddTemplate(key, new RazorEngine.Templating.LoadedTemplateSource("Ala ma kota")); StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); RazorEngine.Engine.Razor.RunCompile(key, sw); string s = sb.ToString(); 

(至less这是我从新的API中推导出来的,旧的被标记为已弃用)有没有一种方法可以使用新的API来渲染模板,而不需要caching,键和其他花哨的东西? 所有官方的例子根本不起作用。

那么,在search代码之后,我发现了一些有用的例子( https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Hosts.Console/Program.cs ),发现如果包含

 using RazorEngine.Templating; 

在你的课程顶部,你可以使用一些扩展方法( https://github.com/Antaris/RazorEngine/blob/master/src/source/RazorEngine.Core/Templating/RazorEngineServiceExtensions.cs )来帮助你。

无痛模板编译:

 Engine.Razor.Compile(templatePath, "templateNameInTheCache", modelType); 

模板parsing:

 Engine.Razor.Run("templateNameInTheCache", modelType, model); 

现在你可以同时做两个!

 string myParsedTemplate = Engine.Razor.RunCompile(templatePath, "templateNameInTheCache", null, model) 

这相当于这样做

 Engine.Razor.AddTemplate("templateNameInTheCache", TemplateLoader.GetTemplate(templatePath)); Engine.Razor.Compile("templateNameInTheCache", modelType); string finallyThisIsMyParsedTemplate = Engine.Razor.Run("templateNameInTheCache", modelType); 

请注意,我目前正在testing这个,但它似乎工作正常。

以下代码适用于ResolvePathTemplateManager (2017年10月)

 var templateManager = new ResolvePathTemplateManager(new[] { rootPath }); var config = new TemplateServiceConfiguration { TemplateManager = templateManager }; Engine.Razor = RazorEngineService.Create(config); // ... var html = Engine.Razor.RunCompile("Test.cshtml", null, model); 

来源:在RazorEngineServiceTestFixture.cs中 ,查找ResolvePathTemplateManager