在整个应用程序中保持单个道具价值的最佳方式是什么

本文关键字:最佳 是什么 方式 单个道 应用程序 | 更新日期: 2023-09-27 17:57:52

我正在使用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;
         }                              
     }
}

但我的合作开发人员建议会话

在整个应用程序中保持单个道具价值的最佳方式是什么?

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

在整个应用程序中保持单个道具价值的最佳方式是什么

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

因此,简而言之,如果您试图在整个应用程序中提供的值是依赖于用户的,那么就使用会话。

检查另一个问题的答案:静态字段与会话变量

不,使用静态变量不是办法:

  1. 如果你的AppDomain被回收,你的所有静态变量都将"重置"
  2. 静态变量不会水平扩展——如果你对应用程序进行负载平衡,那么一个用户访问一台服务器,然后访问另一台服务器时,就不会在第一台服务器的静态变量中看到其他数据
  3. 最重要的是,所有对该服务器的访问都将共享静态变量。。。它根本不会以每个用户为基础。。。而根据您的描述,您不希望用户X看到用户Y的信息

使用static属性有很多缺点,但没有那么多优点(从web应用程序的角度来看)。

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