【问题标题】:Is there a replacement for `HttpApplicationtState` in asp.net core在 asp.net 核心中是否有 `HttpApplicationtState` 的替代品
【发布时间】:2019-08-22 13:22:37
【问题描述】:

我正在将一个用 Asp.Net MVC 框架编写的遗留应用程序迁移到 ASP.net 核心 MVC 和一些类使用 HttpApplicationState 在应用程序的所有用户之间共享缓存对象

我尝试在线阅读有关此对象的替换(例如 IFormFile 替换 HttpPostedFile),但找不到有关此对象的任何信息

/* This method being called from the global.asax file in framework app and 
   usses the HttpApplicationState  */
public static void Foo(HttpApplicationState app)
{
   app.Set("Cache", cache);
}

我想知道如何在迁移的应用程序中实现类似的行为

【问题讨论】:

    标签: asp.net asp.net-core .net-core asp.net-core-mvc


    【解决方案1】:

    这个问题的答案很简单。

    第一,知道HttpApplicationState对象存储数据for all users and sessions to use,引用“与会话状态不同,会话状态特定于单个用户会话,应用程序状态适用于所有用户和会话。” .

    因此,您可以将HttpApplicationState 对象视为在所有人之间共享的基本缓存对象。

    所以回答你的问题,HttpApplicationState 对象的替换是:

    • IMemoryCache 如果您想复制(或多或少)旧版应用程序,它可能是 HttpApplicationState 的字面替换
    • IDistributedCache 现在更受推荐

    【讨论】:

      【解决方案2】:

      您可以在 DI 容器中添加单例:

      public void ConfigureServices(IServiceCollection services)
      {
          services.AddSingleton<ClassToStoreData>();
      }
      

      在此之后,您可以通过将此参数添加到任何类的构造函数来访问数据:

      public class SomeClassThatUsesCache
      {
          public IndexModel(ClassToStoreData cache)
          {
      
          }
      }
      

      ClassToStoreData 中的数据将可供所有用户以及应用程序中的任何位置使用

      【讨论】:

      • 这个解决方案的问题是我需要将应用程序中的所有类转换为通过 DI 实例化,我希望避免这种大规模的重构(是的,它是一个旧应用程序, 2010 旧)
      • 你可以使用一个静态类,它引用了在你启动的 Configure 方法中设置的 ClassToStoreData,但我不推荐它。
      猜你喜欢
      • 2020-01-25
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多