2

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

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

  • 代表一组主要是值类型的类对象实例。

-> 这些设置在不同的、有时是不相关的类中访问。

鉴于以下要点,我目前正在考虑您认为最佳实践:

  • 一个自写的键/值存储。在内部,键/值存储在哈希表中,哈希表被序列化/反序列化以实现持久性。

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

  • 文本文件/XML 文件

  • 还有其他/更好的想法吗?

排除:

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

  • 我不想使用注册表

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

问题:

  • 我不确定是否将所有配置对象存储在同一个实体中,或者是否应该设置几个这样的实体来存储配置组?
  • 持久化这些轻量级对象的最佳方法是什么?这些对象充当设置/配置,然后加载和访问这些对象?
4

2 回答 2

0

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

于 2013-01-11T05:22:25.820 回答
0

我建议在这种情况下使用 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");

编辑:

序列化包含字典成员的类

于 2013-01-11T06:09:47.050 回答