2010-08-24 64 views
0

我想建立这样配置元素集合节

<logSectionGroup> 
    <logSection name="Testttt"> 
     <properties name ="Pride"> 
      <pathName="TestingLog.txt"/> 
      <deleteRetention="100"/> 
      <deleteZeroRetention="5"/> 
      <wildcard="*.txt"/> 
     </properties> 
     <properties name ="Adhoc"> 
      <pathName="blah.txt"/> 
      <deleteRetention="70"/> 
      <deleteZeroRetention="3"/> 
      <wildcard="*.*"/> 
     </properties> 
    </logSection> 
</logSectionGroup> 

一个自定义应用程序的配置元素集合节这可能吗?属性将是配置元素,而日志部分将是配置元素集合。问题是,我只看到你可以拥有多个元素的多个实例,而不是多个元素。

<Section name="Section1">  
    <Section name="Section1"> 
     <SubSection name="SubSection1"> 
      <Item name="Item1" /> 
      <Item name="Item2" /> 
     </SubSection> 
     <SubSection name="SubSection2"> 
      <Item name="Item1" /> 
      <Item name="Item2" /> 
     </SubSection> 
</Section> 

当您使用GetElementKey()你拥有了它在上面的例子中归元“名”,但你会如何返回4个不同的元素,如“路径名”“deleteRetention”等

这里是我的定义对于PropElement

Public Class PropElement 
Inherits ConfigurationElement 

<ConfigurationProperty("pathName", IsRequired:=True)> _ 
Public Property PathName() As String 
    Get 
     Return CStr(Me("pathName")) 
    End Get 
    Set(ByVal value As String) 
     Me("pathName") = value 
    End Set 
End Property 

<ConfigurationProperty("deleteRetention", DefaultValue:="0", IsRequired:=False)> _ 
Public Property DeleteRetention() As Integer 
    Get 
     Return CStr(Me("deleteRetention")) 
    End Get 
    Set(ByVal value As Integer) 
     Me("deleteRetention") = value 
    End Set 
End Property 
<ConfigurationProperty("deleteZeroRetention", DefaultValue:="0", IsRequired:=False)> _ 
Public Property DeleteZeroRetention() As Integer 
    Get 
     Return CStr(Me("deleteZeroRetention")) 
    End Get 
    Set(ByVal value As Integer) 
     Me("deleteZeroRetention") = value 
    End Set 
End Property 
<ConfigurationProperty("wildcard", DefaultValue:="*.*", IsRequired:=False)> _ 
Public Property Wildcard() As String 
    Get 
     Return CStr(Me("wildcard")) 
    End Get 
    Set(ByVal value As String) 
     Me("wildcard") = value 
    End Set 
End Property 

末级

回答

-1

当您使用GetElementKey()你有它归元“N AME”在上述例子中但如何将返回4个不同的元素,例如‘路径名’‘deleteRetention’等

需要一个类型为每个<property>元件,从与ConfigurationElement四个属性导出的什么(定义为元素本身(即一个自派生的自定义类型,对于每种不同的类型—,否则它们将是属性)和一个字符串(您用作集合键)。

然后在执行<logSection>时将Properties集合标记为默认集合。

(不是简单的配置结构,其他什么都导致了很多的类型,但其中大部分很容易创建。)

+0

你能再详细一点吗?我已经为PropElements添加了我的代码。我不确定你收集的密钥是什么意思等。 谢谢 – Matt 2010-08-24 16:49:04

1

也许有点晚了,但你也许还需要一个解释。 由于XML的本质,您无法实现这一点,您需要一个节点名称。

因此<pathName="TestingLog.txt"/>是无效的XML - pathName是节点或属性名吗?

但这些可能是属性,所以你会碰到这样的:

<properties name ="Pride" pathName="TestingLog.txt" deleteRetention="100" deleteZeroRetention="5" wildcard="*.txt"/> 

然后代码是这样的(我希望你能阅读C#,但如果没有,请给我一张纸条和我”将转换为VB)。需要

public class PropElement : ConfigurationElement 
{ 
    [ConfigurationProperty("name", IsRequired = true, IsKey = true)] 
    public string Name 
    { 
     get { return (string)this["name"]; } 
     set { this["name"] = value; } 
    } 

    [ConfigurationProperty("pathName", IsRequired = true)] 
    public string PathName 
    { 
     get { return (string)this["pathName"]; } 
     set { this["pathName"] = value; } 
    } 

    [ConfigurationProperty("deleteRetention", IsRequired = true)] 
    public int DeleteRetention 
    { 
     get { return (int)this["deleteRetention"]; } 
     set { this["deleteRetention"] = value; } 
    } 

    [ConfigurationProperty("deleteZeroRetention", IsRequired = true)] 
    public int DeleteZeroRetention 
    { 
     get { return (int)this["deleteZeroRetention"]; } 
     set { this["deleteZeroRetention"] = value; } 
    } 

    [ConfigurationProperty("wildcard", IsRequired = true)] 
    public string Wildcard 
    { 
     get { return (string)this["wildcard"]; } 
     set { this["wildcard"] = value; } 
    } 
} 

的所有属性,但可以以其他方式将它们标记。

相关问题