.net自定义配置部分元素是否必须有密钥?

Jan*_*sen 5 c# nested configurationsection

Concider以下配置部分:

<PluginSection>
    <Plugins>
       <Plugin name="Plug1">
          <add MessageType="1" MessageSubType="1" Ringtone="chime.wav" Vibrate="1000:0:1"/>
          <add MessageType="1" MessageSubType="2" Ringtone="chime2.wav" Vibrate="1000:0:1"/>
       </Plugin>
       <Plugin name="Plug2">
          <add MessageType="1" MessageSubType="1" Ringtone="chime.wav"/>
          <add MessageType="1" MessageSubType="2" Ringtone="chime2.wav"/>
          <add MessageType="2" Ringtone="chime3.wav"/>
       </Plugin>
    </Plugins>
 </PluginSection>
Run Code Online (Sandbox Code Playgroud)

我已经将其解析为ac#IConfigSectionHandler.现在我明白这个方法已被弃用,我应该使用ConfigurationSection,ConfigurationElements和ConfigurationElementCollections.我在网上(msdn和SO)理解这个例子没有问题.但到目前为止我见过的所有例子都使用了其中一个属性作为关键.我的元素作为插件名称,MessageType和MessageSubType的组合是唯一的.MessageSubType也是可选的.我可以使用推荐的类解析看起来像这样的配置部分,或者我是否必须通过添加"虚拟"键来改变我的配置以适应ConfigurationClasses的制度?

Ric*_*ard 5

没有.

但要避免按键,你需要做更多的工作.

具体类型KeyValueConfigurationCollection允许通过设置一些属性轻松创建配置集合.

要创建一个更加自定义的集合,需要扩展抽象ConfigurationElementCollection(但这仍然基于.使用的添加/删除/清除模型<appSettings>.但允许配置元素名称,但这仍然基于每个元素的一个键值集合的成员(这由覆盖确定,GetElementKey因此不需要直接包含在XML中).

或者,您可以通过扩展来创建自己的,完全自定义的配置集合ConfigurationElement,但是您需要自己完成解析子元素的所有工作(记住ConfigurationElementCollection它本身就是子类ConfigurationElement).

  • @JanPetterJetmundsen:在多次调用GetElementKey的过程中,每个集合元素的结果必须保持一致(因此,除非记住,否则运行编号将不起作用)。否则:是。 (2认同)