在 dotnet core/razor 页面中 store/retrieve 静态数据的最有效方式

Most efficient way to store/retrieve static data in dotnet core/razor pages

我需要在每个页面上显示有关我的应用程序的一些基本信息(使用 _Layout.cshtml)

目前我显示的应用版本是这样的:

<span>version @(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version)</span>

但是,我还需要包括数据库版本和一些其他配置信息(在应用程序启动时从数据库中获取)。

我的问题是保存此信息以尽可能快地生成页面的最有效位置在哪里?我的直觉告诉我 System.Reflection 每次获取版本都很慢(但这可能是完全错误的)。

在应用程序启动时将适当的信息保存到 IConfiguration 是否有意义?在每个页面加载时从 IConfiguration 访问数据是一种有效的处理方式吗?

按照此处所述使用 IMemoryCache 会更好吗? https://docs.microsoft.com/en-us/aspnet/core/performance/caching/memory?view=aspnetcore-5.0

在这里使用标签助手有意义吗? (https://www.learnrazorpages.com/razor-pages/tag-helpers/cache-tag-helper)

如果问题有点含糊,我们深表歉意 - 欢迎任何想法(包括告诉我我什么都不担心!)

谢谢。

一个选项是创建一个提供版本信息的服务 class,以及 register as a singleton。然后你可以将这个服务注入到你的布局中,以获取你想要根据需要呈现的数据。

_Layout.cshtml:

@inject IMyVersionService versionService
@{
    string version = versionService.GetVersion();
}
<!DOCTYPE html>
...
<span>@version</span>

因为服务是单例的,第一次访问会初始化一次,以后访问效率会很高。您可以在构造函数中使用已解析的版本信息设置一个私有字段。