我将我的应用程序Web.config Key-Value数据缓存到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;
}
}
}
答案 0 :(得分:2)
您可以创建一个包装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);
}
}
答案 1 :(得分:0)
ConfigurationManager.AppSettings
已经是NameValueCollection
,用您自己的Dictionary<string,string>
替换它没什么价值。
将appSettings表示为静态或单例类的属性有许多好处:
所有的设计都是权衡,所以这些好处是否能够证明编写和维护静态/单例类的努力是一种判断。我经常在每个程序集中有一个内部静态类,它使用多个或两个appSettings,并为该程序集使用的每个appSetting设置一个强类型属性。
如果你这样做,那么值得采用命名约定,以便清楚哪些appSettings属于哪些程序集,例如&#34; MyAssembly1.MySetting&#34;,&#34; MyAssembly2.MyOtherSetting&#34;