保持C#应用程序设置/配置的最佳实践

时间:2013-01-11 05:09:49

标签: c# mysql entity-framework application-settings configuration-management

我正在努力解决如何保留已读取但也由我的C#应用​​程序更新的首选项/设置/配置。我的配置可以是

  • 表示连接字符串,目录名,文件名,...
  • 的单个整数,字符串,字节[]
  • 字符串或其他值类型的集合。

  • 类对象实例,表示一组主要是值类型。

- >这些设置可以在不同的,有时不相关的类中访问。

我正在考虑您认为最佳做法,给出以下要点:

  • 自编键/值存储。在内部,键/值存储在哈希表中,哈希表被序列化/反序列化以保持持久性。

  • 实体框架:我可以访问MS实体框架并运行MySQL服务器实例。

  • 文本文件/ XML文件

  • 任何其他/更好的想法?

排除:

  • 我不想在Settings.settings,App.config等中存储任何设置

  • 我不想使用注册表

  • 我不想将设置存储在任何模糊的漫游目录结构或其他隐藏目录中。设置应存储在专用数据库/表中,或存储在应用程序可执行文件夹或子文件夹中。

问题:

  • 我不确定是否要将所有配置对象存储在同一个实体中,或者是否应该设置多个此类实体来存储配置组?
  • 持久保存此类轻量级对象的最佳方法是什么,这些对象可用作设置/配置,然后加载和访问这些对象?

2 个答案:

答案 0 :(得分:0)

您可以将设置存储在WMI命名空间中。我们在那里存储了一个特定于产品的设置和配置。此外,虽然您已排除App.config,但通常会在其中存储特定于应用程序的设置。

答案 1 :(得分:-1)

我建议在这种情况下使用XML。

  • 易于阅读和阅读

  • 人性化,易于手动打开和编辑

  • 使用LINQ to XML,您可以查询特定数据并将该数据转换为强类型对象

  • 广泛使用和理解,特别是对于配置文件

  • 灵活的结构

这些只是我想到的一些事情。以下是查询tcp类型的所有协议的文件的示例代码。

XElement settings = XElement.Load("settings.xml");
IEnumerable<XElement> tcpSettings = settings.Elements("protocol").Where(o => o.Attribute("name").Value == "tcp")
// make some changes to the settings
settings.Save("settings.xml");

修改

Serialize Class containing Dictionary member