program tip

새로운 RazorEngine API를 사용한 템플릿

radiobox 2020. 12. 31. 08:09
반응형

새로운 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

반응형