.NET SettingsProvider / ApplicationSettingsBase缓存

时间:2010-01-12 17:01:18

标签: .net caching applicationsettingsbase settingsprovider

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

首先,您可以手动实现这些不可缓存的属性,而不是依赖于持久性机制。您可以在与正常vs.net生成的设置类相关联的部分类中执行此操作。如果您实现了自己的设置类,则不需要部分类,您只需要处理该属性即可。这种方法的缺点是每次读取该设置都会导致db命中。

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