私のmvc Webサイトでは、リクエスト間で共有変数をストックするために静的変数を使用していました.すべてのアプリを再起動したり、ゲッターでそれらを無効にしたりせずに、静的変数のバンドルを「無効化」する方法はありますか.
public static object IdsFromSomethingLocker = new object();
public static int[] IdsFromSomething
{
get
{
if (_idsFromSomething == null)
{
lock (IdsFromSomethingLocker)
{
if (_idsFromSomething == null)
{
_idsFromSomething = // some long loading treatment
}
}
}
return _idsFromSomething;
}
}
解決策は、次のようにこの変数をいつ無効にするかを知るためのアサーションを追加することです。
public static object IdsFromSomethingLocker = new object();
public static int[] IdsFromSomething
{
get
{
if (_idsFromSomething == null || needToBeInvalidate)
{
lock (IdsFromSomethingLocker)
{
if (_idsFromSomething == null)
{
_idsFromSomething = // some long loading treatment
}
}
}
return _idsFromSomething;
}
}
しかし、同様の処理ごとにブール値を追加したくありません。
「キャッシュされた」プロパティの上にカスタム属性を追加して、いつそれらを無効にする必要があるかを知る方法はありますか?
編集:たとえば、長い処理は「xmlファイルをロードして解析する」ことができますが、ファイルが変更されたときに静的プロパティを無効にしたいので、HttpCacheを使用したくありません(使用できるソリューションが必要なため)別のコンテキストでも (winForm)、xml の場合は別のデータソースにすることができます 私の場合、RavenDB からデータを取得します。
オリジナルのデータは別のプログラムによって更新されます。