【问题标题】:Monitor changes to settings in app.config监控 app.config 中设置的更改
【发布时间】:2010-11-09 08:00:42
【问题描述】:

当我使用类型安全的应用程序设置时,我的 app.exe.config 文件中有类似的内容:

<setting name="IntervalTimeout" serializeAs="String">
    <value>10</value>
</setting>

Settings.Designer.vb 做了这样的事情:

<Global.System.Configuration.ApplicationScopedSettingAttribute(),  _
 Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
 Global.System.Configuration.DefaultSettingValueAttribute("10")>  _
Public ReadOnly Property IntervalTimeout() As Integer
    Get
        Return CType(Me("IntervalTimeout"),Integer)
    End Get
End Property

我可以通过以下方式访问设置:

Settings.IntervalTimeout

从外部监控此设置的更改的最佳做法是什么。 IE。该设置由作为服务运行的应用程序使用,当有人打开相应的配置文件并将 IntervalTimeout 更改为假设为 30 时,服务应用程序会收到通知并执行我告诉它重新配置的任何操作。

通常,我会在初始化期间使用类似的东西:

AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged)

然后实现一个 Eventhandler 来检查已更改的属性的名称并做出适当的反应。

但是,PropertyChanged 事件仅在对属性调用 Set 方法时触发,而不是在有人直接更改文件中的数据时触发。当然,这本来是天堂,但可以理解的是,这不是它的工作方式。 ;-)

很可能,我会实现一个文件系统观察器来监视文件的更改,然后重新加载配置,找出更改的内容,然后执行任何必要的操作来反映这些更改。

有人知道更好的方法吗?甚至是受支持的?

【问题讨论】:

    标签: configuration settings app-config appsettings propertychanged


    【解决方案1】:

    ASP.NET 监视 Web.config 文件的更改。它使用 System.Web.FileChangesMonitor 类(标记为内部和密封)执行此操作,该类使用另一个内部类 System.Web.FileMonitor。在反射器中看看它们。对于您的问题来说,这可能太复杂了,但如果我有类似的要求,我肯定会研究一下。

    这看起来很复杂。请记住,一旦检测到更改,ASP.NET 会关闭旧应用程序并启动新应用程序。 App.config 没有在应用程序运行时检测更改。或许重新考虑一下为什么需要这个?

    更简单的方法是在您进行更改后重新启动服务。

    【讨论】:

      猜你喜欢
      • 2013-07-11
      • 1970-01-01
      • 2015-08-08
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 2013-05-31
      • 2017-11-18
      相关资源
      最近更新 更多