새로운 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();
(적어도 이것은 내가 새 API에서 추론 한 것입니다. 이전 API는 더 이상 사용되지 않음으로 표시됩니다.) 새 API를 사용하여 캐싱, 키 및 기타 멋진 요소없이 템플릿을 렌더링하는 방법이 있습니까? 모든 공식적인 예는 단순히 작동하지 않습니다.
글쎄, 코드를 검색 한 후 몇 가지 유용한 예제 ( 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);
템플릿 파싱 :
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);
현재 테스트 중이지만 제대로 작동하는 것 같습니다.
다음 코드는 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
.
@ turdus-merula의 답변을 기반으로 기본 AppDomain이 언로드 될 때 임시 파일을 정리하고 싶었습니다. 구성에서 임시 파일 잠금을 비활성화하여 임시 폴더를 삭제할 수 있습니다.
var config = new TemplateServiceConfiguration
{
TemplateManager = new ResolvePathTemplateManager(new[] {"EmailTemplates"}),
DisableTempFileLocking = true
};
Engine.Razor = RazorEngineService.Create(config);
var html = Engine.Razor.RunCompile("Test.cshtml", null, model);
참조 URL : https://stackoverflow.com/questions/28606132/templating-using-new-razorengine-api
'program tip' 카테고리의 다른 글
Scala repl에서 오류 발생 (0) | 2020.12.31 |
---|---|
C ++에서 업 캐스팅은 언제 불법입니까? (0) | 2020.12.31 |
DateTime 'Z'형식 지정자는 어디에 있습니까? (0) | 2020.12.31 |
Liskov 대체 원칙-재정의 / 가상 방법 없음? (0) | 2020.12.31 |
서블릿 출력 스트림을 닫아야합니까? (0) | 2020.12.31 |