Получение элемента конфигурации от ConfigurationElementCollection

Я имею (надо надеяться), устанавливают ConfigurationElementCollection моего собственного дизайна с электронными письмами как ключи. Теперь, что? Трудно найти на самом деле в сети. Как делают меня:

  1. выполнить итерации через него?

  2. Посмотрите, существует ли определенный элемент?

  3. получить определенный элемент?

... данный:

    YourConfigElement config = 
   ConfigurationManager.GetSection("YourSectionName") as YourConfigElement;

Частичный ответ

1.

 foreach (X x in config.XCollection) 
             <code here>

2. замените "код здесь"

 { 
    if (x.Y == needle) 
    {
       hasIndeed = true;
       break;
    }
 }

3. замените "код здесь"

 { if (x.Y == needle) 
       cameUpWith = x;
       break;
 }

Крошечный аромат.

7
задан Martin 11 November 2010 в 20:50
поделиться

2 ответа

Я не совсем понимаю, что у вас за проблемы - но в принципе, если у вас есть пользовательский элемент конфигурации, вы должны быть в состоянии получить его из файла конфигурации, используя что-то вроде:

YourConfigElement config = 
    ConfigurationManager.GetSection("YourSectionName") as YourConfigElement ;

Как только у вас есть элемент конфигурации, вы можете делать с ним все, что захотите - вы можете реализовать все те вещи, о которых вы просили - проверить существование элемента, получить определенный элемент и т.д.

Вам также следует ознакомиться с серией статей Джона Ристы из трех частей о конфигурации .NET 2.0 на CodeProject - возможно, эти статьи помогут вам решить "проблему" конфигурации ;-)

Очень рекомендую, хорошо написано и чрезвычайно полезно!

И если вы еще не обнаружили его - на Codeplex есть отличный Configuration Section Designer, который делает визуальное проектирование конфигурационных секций и коллекций простым делом и пишет весь липкий клейкий код за вас - очень удобно!

Marc

2
ответ дан 7 December 2019 в 01:18
поделиться

Вам нужен собственный общий базовый класс ConfigurationElementCollection , который реализует IList . Затем вы можете унаследовать от этого все свои коллекции конфигураций и сократить объем работы, которую необходимо выполнить при создании коллекций конфигураций.

public abstract class BaseConfigurationElementCollection<TConfigurationElementType> : ConfigurationElementCollection, IList<TConfigurationElementType> where TConfigurationElementType : ConfigurationElement, IConfigurationElementCollectionElement, new()
{
    protected override ConfigurationElement CreateNewElement()
    {
        return new TConfigurationElementType();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((TConfigurationElementType)element).ElementKey;
    }

    public IEnumerator<TConfigurationElement> GetEnumerator()
    {
        foreach (TConfigurationElement type in this)
        {
            yield return type;
        }
    }

    public void Add(TConfigurationElementType configurationElement)
    {
        BaseAdd(configurationElement, true);
    }

    public void Clear()
    {
        BaseClear();
    }

    public bool Contains(TConfigurationElementType configurationElement)
    {
        return !(IndexOf(configurationElement) < 0);
    }

    public void CopyTo(TConfigurationElementType[] array, int arrayIndex)
    {
        base.CopyTo(array, arrayIndex);
    }

    public bool Remove(TConfigurationElementType configurationElement)
    {
        BaseRemove(GetElementKey(configurationElement));

        return true;
    }

    bool ICollection<TConfigurationElementType>.IsReadOnly
    {
        get { return IsReadOnly(); }
    }

    public int IndexOf(TConfigurationElementType configurationElement)
    {
        return BaseIndexOf(configurationElement);
    }

    public void Insert(int index, TConfigurationElementType configurationElement)
    {
        BaseAdd(index, configurationElement);
    }

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

    public TConfigurationElementType this[int index]
    {
        get
        {
            return (TConfigurationElementType)BaseGet(index);
        }
        set
        {
            if (BaseGet(index) != null)
            {
                BaseRemoveAt(index);
            }
            BaseAdd(index, value);
        }
    }
}

Немного поработав, вы также можете получить коллекцию словарей.

8
ответ дан 7 December 2019 в 01:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: