C# 在整个应用程序中保持单个道具价值的最佳方法是什么?
我正在使用MVC开发一个多租户应用程序。在浏览器中启动应用程序后,我会找到C# 在整个应用程序中保持单个道具价值的最佳方法是什么?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我正在使用MVC开发一个多租户应用程序。在浏览器中启动应用程序后,我会找到TenantId,并将其分配到static属性,以便在整个应用程序中进行维护,如 public static int TenantId { get { return _tenantId; } set { _tenantId = value; string path = HttpContext.Current.Request.ApplicationPath
TenantId
,并将其分配到static
属性,以便在整个应用程序中进行维护,如
public static int TenantId
{
get { return _tenantId; }
set
{
_tenantId = value;
string path = HttpContext.Current.Request.ApplicationPath;
TenantConfigurationModel tenantConfiguration = HospitalFacade.GetTenantIdByUrl(path);
if (tenantConfiguration != null)
{
_tenantId = tenantConfiguration.TenantId;
}
}
}
但我的合作开发者建议进行会话
在整个应用程序中保持单个道具价值的最佳方法是什么
使用静态属性有什么优点/缺点吗?会话:会话针对特定用户。这意味着,如果有两个用户访问您的网站,那么他们将有不同的会话。每个会话都有自己与用户相关的值 简而言之,如果您试图在整个应用程序中提供的值依赖于用户,那么就使用会话 检查其他问题的答案: 不,使用静态变量来实现这一点不是可行的方法:
静态
属性有许多缺点,但没有那么多优点(从web应用程序的角度来看)
你的问题有点让人困惑,你说这是一个多租户网站,但你想在所有用户之间共享租户ID。无论如何,如果目标是在站点上的每个可能的用户上共享数据,那么考虑只将值存储在数据库中,或者,如果速度是一个问题,一些持久的缓存解决方案,比如.< /p>如果它是静态的,它将被每个用户共享。如果这是你想要的,那就去吧。@AntP它共享给所有用户所有用户都应该看到同一个租户吗?听起来有点不对劲。这不是一个基于用户的应用程序,所有匿名用户都可以访问我的应用程序。每当匿名用户访问我的应用程序时,基于我的URL的get-TenantIdSessions可以通过三种方式在MVC中维护:tempdata、viewdata、,和视图包。@AbiRuban
TempData
/ViewData
和viewbag
与Session
不是同义词。但我不想将值存储给用户specific@AbiRuban这很好,但是对于您当前的实现,如果静态变量被重置(这将发生),那么它们将开始返回默认值。您应该拥有一个自定义get访问器,它验证静态备份字段,如果无效,则再次获取该字段。如果你做不到这一点,你每次都会按照詹姆斯的回答从一些持久性的来源获得它。