0

如何在 configurationElementCollection 的元素内使用 nameValueCollection?
像这样的东西:

  <connectionsSection>
    <vendors>
      <add name="nhonho" userName="name" password="password">
        <add key="someKey" value="someValue" />        
      </add>
    </vendors>
  </connectionsSection>

我已经创建了配置元素“供应商”。

public class Connections : ConfigurationSection
{
    private static string SectionName = "connectionsSection";

    private static Connections _section;

    public static Connections Section
    {
        get
        {
            return _section ??
                (_section = (Connections)ConfigurationManager.GetSection(SectionName));
        }
    }

    [ConfigurationProperty("vendors")]
    public VendorCollection Vendors
    {
        get
        {
            return base["vendors"] as VendorCollection;
        }
    }
}


public class VendorCollection : ConfigurationElementCollection
{
    private IList<VendorElement> _vendors = new List<VendorElement>();

    public override ConfigurationElementCollectionType CollectionType
    {
        get
        {
            return ConfigurationElementCollectionType.AddRemoveClearMap;
        }
    }

    public VendorElement Get(string proName)
    {
        return BaseGet(proName) as VendorElement;
    }

    public void Add(VendorElement element)
    {
        BaseAdd(element);
    }

    public void Clear()
    {
        BaseClear();
    }
    public void Remove(VendorElement element)
    {
        BaseRemove(element.Name);
    }

    public void Remove(string name)
    {
        BaseRemove(name);
    }

    public void RemoveAt(int index)
    {
        BaseRemoveAt(index);
    }

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

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((VendorElement)element).Name;
    }
}

public class VendorElement : ConfigurationElement
{
    [ConfigurationProperty("name")]
    public string Name { get { return base["name"] as String; } }

    [ConfigurationProperty("userName")]
    public string UserName { get { return base["userName"] as String; } }

    [ConfigurationProperty("password")]
    public string Password { get { return base["password"] as String; } }

    [ConfigurationProperty("", IsDefaultCollection= true)]
    public NameValueCollection Extensions
    {
        get { return base[""] as NameValueCollection; }
    }
}
4

1 回答 1

0

我错误地找到了一个解决我的问题的 bitbucket 项目的链接。

/// <summary>
/// Hold name value collection - allow duplication of name and values
/// sample :
/// <something>
///     <add name="name1" value="value1" />
///     <add name="name1" value="value1" />
/// </something>
/// </summary>
public class NameValueCollection : ConfigurationElementCollection
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new NameValueElement();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        //to allow duplication of value
        return element.ElementInformation.LineNumber;
    }
}
/// <summary>
/// this is the value element
/// </summary>
public class NameValueElement : ConfigurationElement
{
    [ConfigurationProperty("name")]
    public string Name
    {
        get { return (String)this["name"]; }
        set { this["name"] = value; }
    }

    [ConfigurationProperty("value")]
    public string Value
    {
        get { return (String)this["value"]; }
        set { this["value"] = value; }
    }
}

src:https ://bitbucket.org/kkurni/custom-configuration-element/src/13997e83b899/NameValueCollection.cs

于 2013-04-18T19:32:54.897 回答