2015-09-11 149 views
2

我想做一個相當簡單的自定義配置部分。我的班級:自定義配置部分的問題

namespace NetCenterUserImport 
{ 
    public class ExcludedUserList : ConfigurationSection 
    { 
     [ConfigurationProperty("name")] 
     public string Name 
     { 
      get { return (string)base["name"]; } 
     } 

     [ConfigurationProperty("excludedUser")] 
     public ExcludedUser ExcludedUser 
     { 
      get { return (ExcludedUser)base["excludedUser"]; } 
     } 

     [ConfigurationProperty("excludedUsers")] 
     public ExcludedUserCollection ExcludedUsers 
     { 
      get { return (ExcludedUserCollection)base["excludedUsers"]; } 
     } 
    } 

    [ConfigurationCollection(typeof(ExcludedUser), AddItemName = "add")] 
    public class ExcludedUserCollection : ConfigurationElementCollection 
    { 
     protected override ConfigurationElement CreateNewElement() 
     { 
      return new ExcludedUserCollection(); 
     } 

     protected override object GetElementKey(ConfigurationElement element) 
     { 
      return ((ExcludedUser)element).UserName; 
     } 
    } 

    public class ExcludedUser : ConfigurationElement 
    { 
     [ConfigurationProperty("name")] 
     public string UserName 
     { 
      get { return (string)this["name"]; } 
      set { this["name"] = value; } 
     } 
    } 
} 

我的app.config是:

<excludedUserList name="test"> 
<excludedUser name="Hello" /> 
<excludedUsers> 
    <add name="myUser" /> 
</excludedUsers> 

當我嘗試使用,以獲得自定義配置部分:

var excludedUsers = ConfigurationManager.GetSection("excludedUserList"); 

我得到一個異常說

「無法識別的屬性'名稱'。」

我敢肯定我錯過了一些簡單的東西,但我看了十幾個例子和答案在這裏,似乎無法找到我要去哪裏錯了。

+1

'excludedUserList'是節的開始嗎?如果是這樣,我不認爲你可以有一個屬性附加到它。 – rbm

+0

那麼不是真的 - 檢查這裏:http://stackoverflow.com/questions/9187523/adding-custom-attributes-to-custom-provider-configuration-section-in-app-config – rbm

+0

即使沒有excludedUserList屬性我得到同樣的錯誤。我只添加了確定錯誤出現的時間。我向該部分添加了自定義屬性,然後將該自定義屬性添加到該部分,並且當這兩者都工作時,將自定義集合添加回來,並且一切都再次破碎。 – DrewB

回答

2

在ExcludedUserCollection.CreateNewElement方法是創建一個ExcludedUserCollection情況下,它應該是一個單一的元素,如:

protected override ConfigurationElement CreateNewElement() 
{ 
    return new ExcludedUser(); 
} 

更改方法爲我上面的工作。

+1

完美!謝謝。我知道這是我忽視的簡單事情,但我辦公室裏唯一的其他開發人員中風了,所以我沒有人像這種ATM那樣同行評審。 – DrewB