【问题标题】:nameValueCollection inside an element of a configurationElementCollectionconfigurationElementCollection 的元素内的 nameValueCollection
【发布时间】:2013-04-18 15:15:42
【问题描述】:

如何在 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; }
    }
}

【问题讨论】:

    标签: .net configuration app-config


    【解决方案1】:

    我错误地找到了一个解决我的问题的 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

    【讨论】:

      猜你喜欢
      • 2014-12-24
      • 2011-04-17
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2022-06-10
      相关资源
      最近更新 更多