当我使用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来监视文件的变化,然后重新加载配置,找出发生的变化,然后做任何必要的事情来反映这些变化。
有谁知道更好的方法吗?或者甚至是受支持的人?
答案 0 :(得分:0)
ASP.NET监视Web.config文件以查找更改。它使用System.Web.FileChangesMonitor类(标记为内部和密封)来执行此操作,该类使用另一个内部类System.Web.FileMonitor。在反射器中看看它们。这可能对你的问题来说太复杂了,但如果我有类似的要求,我肯定会调查它。
这看起来很复杂。请记住,ASP.NET会在检测到更改后关闭旧应用程序并启动新应用程序。 App.config未构建为在应用程序运行时检测更改。也许重新考虑为什么需要这个?
更简单的方法是在进行更改后重新启动服务。