代码之家  ›  专栏  ›  技术社区  ›  Mephisztoe

监视app.config中设置的更改

  •  0
  • Mephisztoe  · 技术社区  · 16 年前

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

    我可以用这样的东西访问设置:

    设置.intervaltimeout

    从外部监视此设置的更改的最佳实践是什么。也就是说,该设置由作为服务运行的应用程序使用,当有人打开相应的配置文件并将IntervalTimeout更改为30(比方说30)时,服务应用程序将收到通知,并执行我告诉它的任何操作来重新配置自身。

    通常,我会在初始化时使用这样的方法:

    AddHandler Settings.PropertyChanged, New PropertyChangedEventHandler(AddressOf Settings_PropertyChanged)
    

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

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

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

    有人知道更好的方法吗?甚至是一个支撑的?

    1 回复  |  直到 16 年前
        1
  •  0
  •   RichardOD    16 年前

    ASP.NET监视web.config文件的更改。它使用system.web.filechangesmonitor类(标记为internal和sealed)完成此操作,该类使用另一个内部类system.web.filemonitor。在反光镜里看看。对你的问题来说可能太复杂了,但如果我有类似的要求,我肯定会考虑的。

    这看起来很复杂。请记住,asp.net会关闭旧应用程序,并在检测到更改时启动新应用程序。应用程序运行时,app.config的体系结构无法检测更改。或许重新考虑一下你为什么需要这个?

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