System.Web.Caching.Cache在模型中抛出nullexception

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

我有一个单身人士class:

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 

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

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

谢谢。

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

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

如果不直接了解为什么会出现空引用exception,并且我之前遇到过这个问题,那么它与Web应用程序的基础结构和生命周期紧密相关 :

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

最后,不要以这种方式直接使用System.Web.Caching.Cache类型 – 访问现有的缓存实例或使用类似企业库的缓存应用程序块的替代方法。

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

请改用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上阅读更多内容