我建立了一個配置系統,可以從MySQL數據庫中獲取配置。我已經有了它,但現在我意識到要從緩存中獲得Value,我必須使用這個冗長的代碼。簡化班級結構
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]
編輯:只是添加一些更多的上下文我會添加一些更多的代碼。
這是CacheLayer。它基本上允許我存儲多個配置。我可能有一個例如一般的應用程序配置,但我也可以抓住一個使用的電子郵件數組。
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
是因爲我希望能夠做一些針對性的implmentation的CacheLayer
之外,一個不一定使用dynamic
。
另一個關於我如何使用它的例子。
List<String> EmailList = CacheLayer.Instance.Caches["EmailList"].Current;
這實際上會從包含電子郵件列表的MySQL中獲取一個JSON數組。
任何想法?
感謝。不幸的是,我在原帖中忘記提到我在大多數情況下使用'dynamic'。因此'EmailAlertInterval'實際上是在運行時生成的,而不是編譯時生成的。 – David