【问题标题】:retrieve all configuration settings that are loaded by the configuration manager检索配置管理器加载的所有配置设置
【发布时间】:2010-09-20 12:45:25
【问题描述】:

有没有办法枚举所有设置以获取配置管理器已加载的值?也许我在这里很密集,但我找不到枚举包含在节组中的设置的方法。

我有一个 WCF 服务,该服务旨在允许调用系统传入定义要在服务器上执行的操作的请求对象。该服务在运行时动态加载程序集(如插件模型)并确定哪个对象可以响应请求。我正在寻找一种可以发送“给我所有配置信息”请求的方法,并且该服务可以返回加载的信息。我对已加载到内存中并正在使用的内容以及实际配置文件中指定的值感兴趣(可以替换配置而不影响内存中的任何内容,直到重新启动)。

我可以使用一个 SettingLoaded 事件来跟踪它们,但这似乎有些牵强。

有什么想法吗?

[更新] 这个问题的主要目的是我需要一种方法来确定程序集物理 .config 文件中包含的设置与作为“默认”配置的一部分编译到程序集中的设置之间的区别.

我不能只使用物理配置文件作为比较的起点,因为可能不存在配置文件,或者配置文件可能只提供其中一个值,导致其他使用它们的默认值价值。

【问题讨论】:

  • 为什么要这样做? (如果我们知道您要解决什么问题,我们或许可以为您提供更好的帮助。)

标签: .net configuration


【解决方案1】:

也许我误解了您的问题,但对我来说,唯一可以保证是键/值对的设置是 AppSettings,您可以通过 ConfigurationManager.AppSettings 属性访问它。

【讨论】:

  • 很公平,你是对的——这很简单。我更多地考虑存储在 applicationSettings 组中的设置。在组内,我可以获得部分(每个程序集),但我看不到任何方法来获取加载到内存中的值。已知它们具有 格式,但加载的类型当然是未知的。
【解决方案2】:

听起来您基本上想要一个插件注册系统。听起来您还想区分内存中的内容与加载的内容,因为您想检测注册何时更改而不重新启动?

如果这些都是真的,一种选择是创建您自己的注册 xml 文件并使用 FileWatcher 类在文件更改时获取事件,然后您可以重新加载注册信息。

【讨论】:

  • 这些程序集仅在服务启动时加载一次,因此我不关心运行时发生的任何更改。为了更清楚,我已经编辑了这个问题。
【解决方案3】:

也许这里的解决方案是改变流程/程序,以便通过配置文件显式提供所有基于配置的设置。这可以通过始终为任何设置的默认值提供中断或“已知错误”值来确保。这将确保配置文件必须提供有效值。这种方法将允许使用配置文件作为比较源来比较值。

这种方法的缺点是所有配置设置都必须合并到主程序集的配置文件中才能使值生效。

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2012-07-08
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多