System.Web.Caching.Cache在模型中抛出null异常

时间:2012-10-05 12:49:47

标签: c# asp.net-mvc-3 caching data-caching

也许这个问题应该很简单,但事实并非如此。我看过Problem Using the System.Web.Caching.Cache Class in ASP.NET

我有一个单身人士课程:

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

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

也许我在代码中某处犯了一些错误?

谢谢。

2 个答案:

答案 0 :(得分:9)

您不应使用Cache类型to initialise your own instance

  

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

不直接查看为什么你会得到一个空引用异常,而我之前遇到过这个问题,这是tied in with the infrastructure and lifecycle of a web application

  

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

底线,不要以这种方式直接使用System.Web.Caching.Cache类型 - 访问现有的缓存实例或使用Caching Application Block of the Enterprise Library之类的替代方案。

答案 1 :(得分:1)

正如上面提到的, System.web.caching.cache 存储了ASP.NET内部数据(就像在App_start中构建的包一样)。

请改用 System.Runtime.Caching here's the walkthrough on 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类实现缓存。 read more on MSDN