Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在整个应用程序中保持单个道具价值的最佳方法是什么?_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

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

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

我正在使用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;
         }                              
     }
}
但我的合作开发者建议进行会话

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


使用静态属性有什么优点/缺点吗?会话:会话针对特定用户。这意味着,如果有两个用户访问您的网站,那么他们将有不同的会话。每个会话都有自己与用户相关的值

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

检查其他问题的答案:

不,使用静态变量来实现这一点不是可行的方法:

  • 如果您的AppDomain被回收,那么您的所有静态变量都将被回收 “重置”
  • 静态变量不会水平扩展-如果您对应用程序进行负载平衡,则访问一台服务器的用户将无法在第一台服务器的静态变量中看到数据
  • 最重要的是,静态变量将由对该服务器的所有访问共享。。。它将不会在所有用户的基础上。。。而根据您的描述,您不希望用户X看到用户Y的信息
  • 使用
    静态
    属性有许多缺点,但没有那么多优点(从web应用程序的角度来看)


    你的问题有点让人困惑,你说这是一个多租户网站,但你想在所有用户之间共享租户ID。无论如何,如果目标是在站点上的每个可能的用户上共享数据,那么考虑只将值存储在数据库中,或者,如果速度是一个问题,一些持久的缓存解决方案,比如.< /p>如果它是静态的,它将被每个用户共享。如果这是你想要的,那就去吧。@AntP它共享给所有用户所有用户都应该看到同一个租户吗?听起来有点不对劲。这不是一个基于用户的应用程序,所有匿名用户都可以访问我的应用程序。每当匿名用户访问我的应用程序时,基于我的URL的get-TenantIdSessions可以通过三种方式在MVC中维护:tempdata、viewdata、,和视图包。@AbiRuban
    TempData
    /
    ViewData
    viewbag
    Session
    不是同义词。但我不想将值存储给用户specific@AbiRuban这很好,但是对于您当前的实现,如果静态变量被重置(这将发生),那么它们将开始返回默认值。您应该拥有一个自定义get访问器,它验证静态备份字段,如果无效,则再次获取该字段。如果你做不到这一点,你每次都会按照詹姆斯的回答从一些持久性的来源获得它。