2

MySQL データベースから構成を取得する構成システムをセットアップしました。そして、私はそれを機能させましたが、キャッシュから値を取得するには、この長く乱雑なコードを使用する必要があることに気付きました。

CacheLayer.Instance.Caches["app_config"].Current.EmailALertInterval

を削除したいCurrentのですが、クラスにこれを直接実行させることが可能かどうかわかりませんでした。現時点で実装はこんな感じ。

public T Current
{
    get
    {
        if (_current == null)
        {
            ReloadConfiguration();
        }

        return _current;
    }
}

しかし、私はこれを簡単にしたいと思います:

CacheLayer.Instance.Caches["app_config"].EmailALertInterval

私はこのようなものを見ていますが、これはインデクサーでのみ機能します。

public T this[T key]

編集: コンテキストをさらに追加するために、さらにコードを追加します。

これがキャッシュレイヤーです。基本的に、複数の構成を保存できます。たとえば、一般的なアプリ構成の 1 つがあるかもしれませんが、使用されている電子メールの配列を取得することもできます。

public Dictionary<String,IGenericCache<dynamic>> Caches
{
    get
    {
        return _caches;
    }
}

public void AddCache(String config)
{
    _caches.Add(config,new GenericCache<dynamic>(config));
}

GenericCache 内で、MySQL データベースに保存されている JSON 文字列を使用して構成を読み込みます。

_current = JsonConvert.DeserializeObject<T>(db.dbFetchConfig(config));

である理由とそうでない理由GenericConfigは、必ずしも を使用しないの外部でカスタム実装を作成できるようにしたいからです。TdynamicCacheLayerdynamic

これをどのように使用するかについての別の例。

List<String> EmailList = CacheLayer.Instance.Caches["EmailList"].Current;

これは実際には、電子メールのリストを含む MySQL から JSON 配列を取得します。

何か案は?

4

2 に答える 2

2

新しいプロパティを追加する

public int EmailALertInterval
{
    get { return Current.EmailALertInterval; }
}
于 2012-06-10T14:48:24.157 に答える
1

これらの構成はたくさんありますが、EmailAlertInterval はほんの一例ですよね?

次に、既に述べたように、Caches クラスを変更する必要があります。

しかし、どのキャッシュが CacheLayer に入るかはすでにわかっているので (私があなたの例を理解しているように)、そこにプロパティを持つことができます。

CacheLayer.Instance.Caches.AppConfig.EmailALertInterval

そして、そのプロパティは Current が現在行っていることを処理します。

public T AppConfig
{
    get
    {
        if (appConfig == null)
        {
           return ReloadConfiguration();
        }

        return appConfig;
    }
}

もっとエレガントであるべきだと思う

于 2012-06-10T14:57:57.597 に答える