0

當我使用類型安全的應用程序設置,我有這樣的事情在我app.exe.config文件:監視對在App.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) 

,然後實現它檢查已經改變並作出適當的反應屬性的名稱的事件處理程序。

但是,只有在某個屬性上調用Set方法時,纔會觸發PropertyChanged事件,而不是在有人直接在文件內更改數據時觸發。當然,這將是天堂,但可以理解的是,這不是它的工作方式。 ;-)

最有可能的是,我會實現一個文件系統監視器來監視文件的更改,然後重新加載配置,找出發生了什麼變化,然後做任何必要的事情來反映這些變化。

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

回答

0

ASP.NET監視Web.config文件以進行更改。它使用System.Web.FileChangesMonitor類(標記爲internal和sealed)執行此操作,該類使用另一個內部類System.Web.FileMonitor。看看他們在反射器。對於你的問題,這可能太複雜了,但如果我有類似的要求,我肯定會考慮它。

這看起來相當複雜。請記住,ASP.NET會關閉舊應用程序,並在檢測到更改後啓動一個新應用程序。在應用程序運行時,App.config未被構建爲檢測更改。也許重新考慮爲什麼你需要這個?

更簡單的方法是在完成更改後重新啓動服務。