知道RazorEngine中的特定模板是否已经编译
本文关键字:是否 编译 RazorEngine 知道 | 更新日期: 2023-09-27 18:19:20
是否有可能知道一个特定的模板是否已经使用RazorEngine编译?基本上,如果你调用:
Razor.Parse("Hello there @Model.Name", model, "hello-world");
这将使用'hello-world'键编译模板。第一次可能需要几毫秒,但由于缓存,第二次几乎是瞬间完成的。是否有可能知道模板是否已经编译?比如:
var isCompiled = Razor.IsCompiled("Hello there @Model.Name", "hello-world");
RazorEngine v3.2.0包含一个ITemplateService.HasTemplate
方法用于检查缓存,但是这个方法在Razor
静态类型上不存在,所以要使用它,你需要手动实例化和维护一个TemplateService
实例。
你真的需要知道它们是否已经被缓存了吗?我之所以问这个问题,是因为每当您调用ITemplateService.Parse
(Razor.Parse
)时,我们都会在开始解析模板之前考虑缓存。
从3.4.1.0开始,如果模板不在缓存中,Razor.Resolve(templateName)
将返回null。如果您试图确定缓存是否包含您发送的文本的特定版本,则这可能没有帮助。
您可以使用以下扩展方法:
public static class RazorEngineServiceExtensions {
public static bool IsTemplateCached(this IRazorEngineService service, string name, Type modelType);
}
一个例子:
if (!Engine.Razor.IsTemplateCached(templateName, modelType)) {
Engine.Razor.Compile(templateSource, templateName, modelType);
}