0

当我使用类型安全的应用程序设置时,我的 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 方法时触发,而不是在有人直接更改文件中的数据时触发。当然,这本来就是天堂,但可以理解的是,这不是它的工作方式。;-)

最有可能的是,我会实现一个文件系统观察器来监视文件的更改,然后重新加载配置,找出更改的内容,然后做任何必要的事情来反映这些更改。

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

4

1 回答 1

0

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

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

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

于 2009-07-09T10:14:28.730 回答