2010-08-24 122 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; } 
    } 
} 

的所有屬性,但可以以其他方式將它們標記。

相關問題