监视app.config中设置的更改

时间:2009-07-09 10:07:46

标签: configuration settings app-config appsettings propertychanged

当我使用typeafe应用程序设置时,我的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

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

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

AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged)

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

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

最有可能的是,我实现了一个filesystemwatcher来监视文件的变化,然后重新加载配置,找出发生的变化,然后做任何必要的事情来反映这些变化。

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

1 个答案:

答案 0 :(得分:0)

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

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

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