5

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

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

这将使用键“hello-world”编译模板。第一次这可能需要几毫秒,但由于缓存,第二次几乎是瞬间。是否可以知道模板是否已经编译?就像是:

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

3 回答 3

3

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

你真的需要知道它们是否已经被缓存了吗?我问是因为我们在开始解析模板之前会考虑缓存,无论何时调用ITemplateService.Parse( Razor.Parse)。

于 2013-06-26T15:25:55.437 回答
2

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

于 2014-09-04T23:36:07.090 回答
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);
}
于 2016-08-25T13:59:40.880 回答