知道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中的特定模板是否已经编译

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);
}