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

2行目でnull参照例外がスローされるのはなぜですか?

たぶん私はコードのどこかで間違いを犯しましたか?

ありがとうございました。

4

2 に答える 2

9

Cacheタイプを使用して独自のインスタンスを初期化しないでください。

このAPIは.NETFrameworkインフラストラクチャをサポートしており、コードから直接使用することを目的としたものではありません。

null参照例外が発生する理由を直接調べることなく、以前にこの問題に遭遇したことがありますが、これはWebアプリケーションのインフラストラクチャとライフサイクルに関連しています

このクラスのインスタンスはアプリケーションドメインごとに1つ作成され、アプリケーションドメインがアクティブである限り有効です。このクラスのインスタンスに関する情報は、HttpContextオブジェクトのCacheプロパティまたはPageオブジェクトのCacheプロパティから入手できます。

結論として、この方法でタイプを直接使用しないでください。既存のキャッシュインスタンスにアクセスするか、エンタープライズライブラリのCachingApplicationBlockSystem.Web.Caching.Cacheなどの代替手段を使用してください。

于 2012-10-05T12:57:43.113 に答える
1

Grantが上記で述べたように、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 に答える