gpt4 book ai didi

asp.net-mvc - MVC - 如何在整个应用程序中实例化、存储和使类型化变量可用,每次页面 View 一次

转载 作者:行者123 更新时间:2023-12-04 16:59:59 24 4
gpt4 key购买 nike

我正在开发一个 MVC 应用程序来服务多个域——每个域都是一个大公司的一个分支。

一个 LocalBranch类存储详细信息,例如电话、地址、电子邮件、位置坐标等。

我想为每个 http 请求创建一个此类的单个实例,并使其在整个应用程序中可用 - 从 Controller 、 View 、一些帮助程序类和其他代码中。

有推荐的方法吗?

现在我将它作为 BaseController 上的属性。并使用 ViewBag将其传递给 View 。但如果可能的话,我更希望它在 Views 中强输入。

我不想把它放在应用程序变量中,因为我们需要为不同的域提供不同的值。

如果可能的话,我宁愿避免使用 session 变量,因为我们将来可能会扩展以使用多个服务器,而且我听说这与 session 不兼容。

如果您认为有更清晰的方式来表达我的追求,请随时更新标签/标题。谢谢你。

最佳答案

在 Web 应用程序中维护每个请求的状态的最佳方法是简单地使用 HttpContext类(class)。

您需要将您的状态(LocalBranch)存储为 ItemHttpContext :

HttpContext.Current.Items.Add("LocalBranch", GetLocalBranch());

您可以像这样在整个应用程序中获取项目:
LocalBranch branch = HttpContext.Current.Items["LocalBranch"] as LocalBranch;
Items属性只是一个键值 Dictionary .值是一个对象。您必须检查 空值 这与 Session 非常相似你知道的对象。主要区别在于范围。 HttpContext是一个具有 http 请求生命周期的点网对象。

现在,按照我向您展示的方式使用 HttpContext 是最简单的方法。

您可以前进两步并使用名为 Unity 的框架。并为您的对象添加生命周期。

Unity 做得更多,生命周期管理只是一颗 gem 。

您可以创建自定义 HttpContext 生命周期,为每个请求生成对象。像 this .

你需要做的就是:

1.用 HttpContext注册你的LocalBranch类生命周期。
2.添加一个静态的 Current 属性,它将使用 Unity 容器并解析 LocalBranch 的正确实例.
3.像这样使用它: LocalBranch.Current
顺便说一句,您可以使用 Unity 的 dependency injection用于将对象注入(inject) Controller 和其他模块。这是一个比仅使用静态 Current 属性更好的做法。

关于asp.net-mvc - MVC - 如何在整个应用程序中实例化、存储和使类型化变量可用,每次页面 View 一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28178821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com