asp.net MVC有Application变量吗?

Mar*_*man 43 c# asp.net-mvc application-state

我正在忙着将Web应用程序转换为MVC,并将一些信息保存到跨多个租户/帐户使用的应用程序变量中,以使事情更有效率.

我意识到MVC的目的是让事情尽可能无状态,Sesion State显然在MVC中存在并存在,但我们不想将Application转换为Session变量,因为我们宁愿拥有更全局和更安全的东西.MVC应用程序是否具有应用程序变量?我看过一些使用缓存的例子?这是现在的标准吗?与应用程序/会话状态相比,这是多么强大/安全?

WWC*_*WWC 99

是的,您可以从.NET MVC访问应用程序变量.这是如何做:

System.Web.HttpContext.Current.Application.Lock();
System.Web.HttpContext.Current.Application["Name"] = "Value";
System.Web.HttpContext.Current.Application.UnLock();
Run Code Online (Sandbox Code Playgroud)

  • 为什么要调用`Lock`和`Unlock`?在读取先前设定的值时是否还需要? (4认同)
  • 一个例子是,您有多个用户访问您的站点,并且您希望每隔几分钟运行一次资源密集型代码,但不会更多.应用程序变量可用于各个会话,因此您可以使用应用程序变量来跟踪上次有人运行资源密集型代码的时间.您锁定应用程序变量,检查上次运行的时间,以及是否需要再次运行代码,将应用程序变量更新为当前时间,解锁变量并运行资源密集型代码. (3认同)

小智 7

会话状态或缓存是更好的选择.它们在MVC中是可模拟的,旨在存储会话和应用程序范围的数据.

静态类似乎是一个受欢迎的选择.但是,静态类会在类型之间创建依赖关系,并使版本控制/测试变得更加困难.在框架中使用它也是一种奇怪的模式,旨在打破这些类型的依赖关系.例如,标准的ASP.NET框架充满了静态和密封类型.这些都被可模拟的实例取代.

在这种背景下,"安全"有点不清楚.究竟是什么意思"安全?"

  • 当然,为了实现最佳解耦,测试等应该将它们存储在普通类中,并将类实例放在IoC容器中. (2认同)