系统.网状物缓存.缓存在模型中引发null异常



也许这个问题应该很简单,但事实并非如此。我读过《使用系统的问题》。网状物缓存。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

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

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

谢谢。

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

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

如果不直接研究为什么会得到一个空引用异常,我以前也遇到过这个问题,这与web应用程序的基础设施和生命周期有关:

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

最重要的是,不要以这种方式直接使用System.Web.Caching.Cache类型——要么访问现有的缓存实例,要么使用企业库的缓存应用程序块之类的替代方案。

正如Grant在上面所指出的,System.web.cachech.cache存储ASP。NET内部数据(比如在App_start中构建的捆绑包)。

使用系统。运行时。改为缓存。这是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 上的更多信息

最新更新