知道RazorEngine中的特定模板是否已经编译过

时间:2013-06-20 18:27:31

标签: c# razor razor-2

是否可以知道是否已使用RazorEngine编译特定模板?基本上,如果你打电话:

Razor.Parse("Hello there @Model.Name", model, "hello-world");

这将使用密钥'hello-world'编译模板。这可能是第一次花费几十毫秒,但由于缓存,第二次几乎是即时的。是否可以知道模板是否已编译?类似的东西:

var isCompiled = Razor.IsCompiled("Hello there @Model.Name", "hello-world");

3 个答案:

答案 0 :(得分:3)

RazorEngine的v3.2.0包含用于检查缓存的ITemplateService.HasTemplate方法,但Razor静态类型上不存在此方法,因此要使用它,您需要手动实例化和维护TemplateService实例。

你真的需要知道它们是否已被缓存?我问,因为我们在开始解析模板之前考虑缓存,只要您调用ITemplateService.ParseRazor.Parse)。

答案 1 :(得分:2)

从3.4.1.0开始Razor.Resolve(templateName)如果模板不在缓存中,则返回null。如果您尝试确定缓存是否包含您发送的文本的特定版本,那么这可能没有用。

答案 2 :(得分:1)

您可以使用以下扩展方法:

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