在整个应用程序中维护单个道具值的最佳方法是什么?

时间:2014-04-10 09:26:36

标签: 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;

         TenantConfigurationModel tenantConfiguration = HospitalFacade.GetTenantIdByUrl(path);
         if (tenantConfiguration != null)
         {                   
             _tenantId = tenantConfiguration.TenantId;
         }                              
     }
}

但我的合作开发者建议会话

在整个应用程序中维护单个道具价值的最佳方法是什么?

使用静态属性有什么优点/缺点吗?

2 个答案:

答案 0 :(得分:1)

会话:会话适用于特定用户。这意味着如果2个用户访问您的网站,那么他们两个将拥有不同的会话。每个会话都有自己的与用户相关的值。

简而言之,如果您尝试在整个应用程序中提供的值取决于用户,则使用会话。

检查其他问题的答案:Static fields vs Session variables

不,使用静态变量不是要走的路:

  1. 如果您的AppDomain被回收,那么您的所有静态变量都将是 “复位”
  2. 静态变量不会水平扩展 - 如果您对应用程序进行负载平衡,则命中一个服务器然后另一个服务器的用户将看不到第一个服务器中静态变量中的数据
  3. 最重要的是,静态变量将由对该服务器的所有访问共享...它根本不会基于每个用户...而根据您的描述,您不希望用户X看到用户Y的信息。

答案 1 :(得分:1)

使用static属性存在许多缺点,而且没有那么多优点(从Web应用程序的角度来看)。

您的问题有点令人困惑,您说它是一个多租户网站,但您希望在所有用户之间共享租赁ID。无论如何,如果目标是在站点上的每个可能用户之间共享数据,那么考虑将值存储在数据库中,或者如果速度是一个问题,则需要一些持久的缓存解决方案,如Redis