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
は、必ずしも を使用しないの外部でカスタム実装を作成できるようにしたいからです。T
dynamic
CacheLayer
dynamic
これをどのように使用するかについての別の例。
List<String> EmailList = CacheLayer.Instance.Caches["EmailList"].Current;
これは実際には、電子メールのリストを含む MySQL から JSON 配列を取得します。
何か案は?