2010-09-20 93 views
2

有没有什么方法可以通过所有设置来枚举配置管理器加载的值?也许我在这里很密集,但我找不到一种方法来枚举节组中包含的设置。检索配置管理器加载的所有配置设置

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

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

任何想法?

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

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

+0

你为什么要这样做? (如果我们知道您要解决什么问题,我们可能会给您更好的帮助。) – Richard 2010-09-20 12:52:43

+0

已编辑,谢谢! – 2010-09-20 13:29:23

回答

0

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

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

1

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

+0

够公平的,你说得对 - 这很简单。我更多地考虑存储在applicationSettings组中的设置。在组内部,我可以得到部分(每个程序集),但我看不到任何方式来获取内存中加载的值。他们已知有格式,但加载的类型当然是未知的。 – 2010-09-20 13:17:36

0

这听起来像你基本上想拥有一个插件注册系统。这听起来像是你试图区分内存中的内容与加载的内容,因为你想要检测注册何时改变而不重新启动?

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

+0

这些程序集只在服务启动时加载一次,所以我不关心运行时发生的任何更改。为了更加清晰,我编辑了这个问题。 – 2012-03-23 18:12:43