使用 DbContext 和 DI 创建一个可从 razor 调用的通用例程
create a common routine callable from razor with DbContext and DI
我想创建一个通用例程,我可以在其中传递一个键,然后在该例程中提取该键的值。如果密钥不存在,我会从数据库中提取它并缓存它。
在下面的示例中,Resources
是具有静态成员 ConfigDisplay
的 class。因为它是静态的,所以我没有注入我通常的依赖项(就像我可以使用控制器 - httpcontext,服务,回购等)。
从需要访问我的 DbContext 的 Razor 调用方法的更好方法是什么?简而言之,我需要配置标签或按钮或其他任何内容的文本,并且在该页面的第一个请求期间,我将其从我的数据库中提取并缓存以供进一步请求。似乎是一个简单的问题,只是我的头脑没有正确地解决它!
<div>
<input id="searchnode" type="text" placeholder="@Resources.ConfigDisplay("mykey")" />
</div>
Inside my helper class, Resources:
static public string ConfigDisplay(sting key)
{ // Need DbContext here to pull out value for "key" if it doesn't exist }
您有几个选项,最佳选项取决于您需要此值的位置和频率:
-
您可以创建一个自定义操作过滤器,它会注入您的上下文,检索值,然后将其设置为类似 ViewBag
的内容。然后,您只需将该属性添加到任何需要该值的 controller/action,它就会在您存储它的地方等着您(即 ViewBag
)。这也可以在您的 Startup.cs.
中全局应用
-
您可以创建一个标签助手,它注入您的上下文并检索值。这种方法的好处在于,您可以对它进行某种程度的概括,以允许检索不同的值。例如,您可以有一个标签助手来访问设置 table 和 returns 特定设置,例如:
<setting key="MySetting" />
并且,一旦 Razor 完成视图渲染,它就会在那里设置该设置的值,而不是您的自定义标记。
-
您可以创建一个视图组件,用您的值呈现局部。如果该值始终用于创建 HTML 的某些标准位,这是一个很好的方法。无需将此 HTML 复制到各处,您只需调用视图组件,它将获取值,然后呈现 HTML 的适当位并将整个 shebang 转储到您的页面上。同样,您可以将其与您的上下文一起注入,以允许它检索值。
在上述所有三种情况下,缓存位实际上是次要的,无论您采用哪种方法,都会以相同的方式处理。通常,您会在 Startup.cs 中配置一个 IDistributedCache
,然后将 IDistributeCache
与您的上下文一起注入。您首先尝试从缓存中检索值,如果不存在,则查询上下文并将其保存到缓存中。
我想创建一个通用例程,我可以在其中传递一个键,然后在该例程中提取该键的值。如果密钥不存在,我会从数据库中提取它并缓存它。
在下面的示例中,Resources
是具有静态成员 ConfigDisplay
的 class。因为它是静态的,所以我没有注入我通常的依赖项(就像我可以使用控制器 - httpcontext,服务,回购等)。
从需要访问我的 DbContext 的 Razor 调用方法的更好方法是什么?简而言之,我需要配置标签或按钮或其他任何内容的文本,并且在该页面的第一个请求期间,我将其从我的数据库中提取并缓存以供进一步请求。似乎是一个简单的问题,只是我的头脑没有正确地解决它!
<div>
<input id="searchnode" type="text" placeholder="@Resources.ConfigDisplay("mykey")" />
</div>
Inside my helper class, Resources:
static public string ConfigDisplay(sting key)
{ // Need DbContext here to pull out value for "key" if it doesn't exist }
您有几个选项,最佳选项取决于您需要此值的位置和频率:
-
您可以创建一个自定义操作过滤器,它会注入您的上下文,检索值,然后将其设置为类似
ViewBag
的内容。然后,您只需将该属性添加到任何需要该值的 controller/action,它就会在您存储它的地方等着您(即ViewBag
)。这也可以在您的 Startup.cs. 中全局应用
-
您可以创建一个标签助手,它注入您的上下文并检索值。这种方法的好处在于,您可以对它进行某种程度的概括,以允许检索不同的值。例如,您可以有一个标签助手来访问设置 table 和 returns 特定设置,例如:
<setting key="MySetting" />
并且,一旦 Razor 完成视图渲染,它就会在那里设置该设置的值,而不是您的自定义标记。
-
您可以创建一个视图组件,用您的值呈现局部。如果该值始终用于创建 HTML 的某些标准位,这是一个很好的方法。无需将此 HTML 复制到各处,您只需调用视图组件,它将获取值,然后呈现 HTML 的适当位并将整个 shebang 转储到您的页面上。同样,您可以将其与您的上下文一起注入,以允许它检索值。
在上述所有三种情况下,缓存位实际上是次要的,无论您采用哪种方法,都会以相同的方式处理。通常,您会在 Startup.cs 中配置一个 IDistributedCache
,然后将 IDistributeCache
与您的上下文一起注入。您首先尝试从缓存中检索值,如果不存在,则查询上下文并将其保存到缓存中。