![](/img/trans.png)
[英]When should I use params Object[] versus Dictionary<String, Object>?
[英]Should i use property or Dictionary object for cashing config data
我將我的應用程序Web.config鍵值數據緩存到一個Singleton對象中,可以在其中將配置數據存儲在類屬性或字典對象中。 考慮到性能和靈活性,我無法在使用字典或類屬性之間做出選擇。
基於以上兩個原因,目前我正在使用字典來存儲緩存的數據。 請提出是否存在更好的解決方案,這是我的示例代碼。
public class ConfigData
{
/// <summary>
/// The configuration data
/// </summary>
public static readonly IDictionary<string, string> ConfigurationData = new Dictionary<string, string>();
/// <summary>
/// Initializes the <see cref="ConfigData" /> class.
/// </summary>
static ConfigData()
{
try
{
ConfigurationData = NVCExtender.ToDictionary(ConfigurationManager.GetSection("appSettings") as NameValueCollection);
}
catch (Exception ex)
{
throw;
}
}
}
您可以創建一個包裝ConfigurationManager.AppSettings
或IDictionary<string, string>
並公開如下讀取/更新基礎對象的屬性:
對於ConfigurationManager.AppSettings
,您可以執行以下操作:
public class ConfigManager
{
public string IPAddress
{
get
{
if (ConfigurationManager.AppSettings.Keys.Any(k => k == "IPAddr"))
return ConfigurationManager.AppSettings.GetValues("IPAddr")[0];
return null;
}
set
{
if (ConfigurationManager.AppSettings.Keys.Any(k => k == "IPAddr"))
ConfigurationManager.AppSettings.Remove("IPAddr");
ConfigurationManager.AppSettings.Add("IPAddr", value);
}
}
對於IDictionary<string, string>
,您可以執行以下操作:
public class ConfigManager
{
private readonly IDictionary<string, string> m_Dictionary;
public ConfigManager(IDictionary<string, string> dictionary)
{
m_Dictionary = dictionary;
}
public string IPAddress
{
get
{
if (m_Dictionary.ContainsKey("IPAddr"))
return m_Dictionary["IPAddr"];
return null;
}
set
{
if (m_Dictionary.ContainsKey("IPAddr"))
m_Dictionary.Remove("IPAddr");
m_Dictionary.Add("IPAddr", value);
}
}
ConfigurationManager.AppSettings
已經是一個NameValueCollection
,用您自己的Dictionary<string,string>
替換它幾乎沒有什么價值。
將appSettings表示為靜態或單例類的屬性有很多好處:
所有設計都需要權衡取舍,因此這些好處是否足以證明編寫和維護static / singleton類的努力是正確的判斷。 我通常在每個Assembly中都有一個內部靜態類,該類使用一個或兩個以上的appSettings,以及該Assembly使用的每個appSetting的強類型屬性。
如果這樣做,則值得采用命名約定,以便清楚地知道哪個appSettings屬於哪個程序集,例如“ MyAssembly1.MySetting”,“ MyAssembly2.MyOtherSetting”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.