2016-04-28 41 views
1
扩展元素

我们有我们使用与碳酸化的app.config在App.config中

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="carbonator" type="Crypton.Carbonator.Config.CarbonatorSection, Crypton.Carbonator"/> 
    </configSections> 

    <carbonator defaultCulture="en-US" logLevel="1" collectionInterval="1000" reportingInterval="1000" > 
    <statsd server="127.0.0.1" port="8125" /> 
    <counters> 
     <add path="processor_information.pct_processor_time.total" category="Processor" counter="% Processor Time" instance="_Total" /> 
     <add path="memory.available_MBytes" category="Memory" counter="Available MBytes" instance="" /> 
     <add path="memory.pct_commited_bytes_in_use" category="Memory" counter="% Committed Bytes In Use" instance="" /> 
    </counters> 
    </carbonator> 
</configuration> 

我们希望允许用户配置中,我们从<counters>元素引用外部配置文件自己的自定义计数器。例如,我们想允许用户配置文件看起来像:

<add path="logical_disk.pct_free_space.C" category="LogicalDisk" counter="% Free Space" instance="C:" /> 
<add path="logical_disk.disk_read_bytes_per_sec.C" category="LogicalDisk" counter="Disk Read Bytes/sec" instance="C:" /> 
<add path="logical_disk.disk_write_bytes_per_sec.C" category="LogicalDisk" counter="Disk Write Bytes/sec" instance="C:" /> 

我甚至不知道这是可能的appConfig元素之外,但任何帮助表示赞赏。

回答

3

根据this answer它应该是可能的。在this article中也描述了相同的方式。

但我不认为这是一个好主意,其中一个原因 - 如果用户在他的配置扩展中犯了一个错误,它将阻止应用程序执行,因为应用程序配置变得无效。

我宁愿使用app.config文件中的配置来提供默认值并自己实现一些用户配置。这种情况下,你可以使用任何你喜欢的配置格式,例如JSON,这对用户来说也会更好(更容易创建和编辑)。在您的应用程序中,您只需合并两个配置(app.config值是默认值,将被用户的配置覆盖)。

+0

感谢您的回答。我们仍在调查最佳方法,但我会牢记您的建议。 – lhoworko

+0

不客气。我肯定会实现用户配置的自定义配置,因为你可以控制一切。您可以向用户展示更好的错误消息(实际上是有意义的消息,因为关于格式错误的'app.config'的默认错误消息可能会让用户感到困惑)。 –