4

也许这个问题应该很容易,但事实并非如此。我已经阅读了在 ASP.NET 中使用 System.Web.Caching.Cache 类的问题

我有一个单例类:

private System.Web.Caching.Cache _cache;
private static CacheModel _instance = null;

private CacheModel() {
   _cache = new Cache();
}

public static CacheModel Instance {
         get {
            return _instance ?? new CacheModel();
         }
      }

public void SetCache(string key, object value){
   _cache.Insert(key, value);
}

如果在我的代码中的其他任何地方,我调用以下命令:

CacheModel aCache = CacheModel.Instance;
aCache.SetCache("mykey", new string[2]{"Val1", "Val2"});  //this line throws null exception

为什么第二行会抛出空引用异常?

也许我在代码的某个地方犯了一些错误?

谢谢你。

4

2 回答 2

9

您不应该使用该Cache类型来初始化您自己的实例

此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用。

如果不直接研究为什么会出现空引用异常,而且我之前也遇到过这个问题,这与 Web 应用程序的基础设施和生命周期有关

每个应用程序域创建一个此类的实例,只要应用程序域保持活动状态,它就保持有效。有关此类实例的信息可通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性获得。

最重要的是,不要System.Web.Caching.Cache以这种方式直接使用该类型 - 要么访问现有的缓存实例,要么使用像Enterprise Library 的 Caching Application Block这样的替代方案。

于 2012-10-05T12:57:43.113 回答
1

正如格兰特在上面提到的,System.web.caching.cache存储 ASP.NET 内部数据(如已在 App_start 中构建的包)。

请改用System.Runtime.Caching这是 MSDN 上的演练

这是一个片段:`

using System.Runtime.Caching;

...

ObjectCache cache = MemoryCache.Default;
var test = "hello world";
cache["greeting"] = test;
var greeting = (string)cache["greeting"];

`

在 ASP.NET 4 中,缓存是通过使用 ObjectCache 类实现的。 在 MSDN 上阅读更多内容

于 2017-06-22T00:53:35.590 回答