1

我正在查看一些使用 .NET System.Configuration.SettingsProvider 和 ApplicationSettingsBase 来处理配置的代码。

我们有一个派生自 SettingsProvider 的类,它使用数据库作为数据存储,然后我们有其他从 ApplicationSettingsBase 继承的设置类,并具有 [SettingsProvider(typeof(MySettingsProvider))] 属性。

问题是我们在多个应用程序中使用这些设置类,但它们似乎在第一次加载时永久缓存配置值。问题是,如果在一个应用程序中更改了设置,其他应用程序将在下次重新启动之前无法获得该设置,因为它们被缓存在任何地方。

我的问题是:有没有办法强制 SettingsProvider 实现或派生自 ApplicationSettingsBase 的类不缓存值,并在每次访问设置时重新查询数据存储?一个有效的答案可能是这些类不打算在多应用程序环境中使用......

4

1 回答 1

3

基于 ApplicationSettingsBase 的设置对象仅在实例化、保存或重新加载操作时与持久性机制/SettingsProvider 交互。其余时间,它只是处理设置对象中的哈希表。

有几种方法可以获得您想要的行为。

首先,您可以手动实现那些不可缓存的属性,而不是依赖持久性机制。您可以在与普通 vs.net 生成的设置类配套的部分类中执行此操作。如果您实现了自己的设置类,则不需要分部类,您只需添加属性即可。这种方法的缺点是对该设置的每次读取都会导致数据库命中。

或者,如果您需要读取缓存,但允许跨应用程序进行更改。在您可以覆盖的 ApplicationSetttingsBase.Save 中,您可以使用发布/订阅者机制,该机制允许您通过 ApplicationSetttingsBase.Reload 通知所有订阅者刷新他们的内容。
这涉及更多,并且根据要求,您可能需要担心保持设置对象的状态一致。

于 2010-06-06T16:11:59.433 回答