пользовательский раздел конфигурации

Я использую интерфейс IConfigurationSectionHandler для получения информации о моем пользовательском разделе конфигурации. Но это устарело, и вместо этого я хочу использовать ConfigurationSection.

Как создать пользовательский раздел ConfigurationSection с этим представлением и использовать ConfigurationSection вместо IConfigurationSectionHandler:

<CustomSectionBlaBla>
   <Parent name="DB">
       <FirstChild value="someValue"/>
       <SecondChild value="someValue"/>
   <Parent/>
    ...
   <Parent name="UI">
       <FirstChild value="someValue"/>
       <SecondChild value="someValue"/>
   <Parent/>
<CustomSectionBlaBla/>

person Timur Mustafaev    schedule 02.11.2011    source источник
comment
Вам следует ознакомиться с серией из трех частей Джона Ристы о настройке .NET 2.0 на CodeProject. - Раскрытие тайн конфигурации .NET 2.0 - Расшифровка тайн конфигурации .NET 2.0 - Раскрывая тайны конфигурации .NET 2.0 Настоятельно рекомендуется, хорошо написано и чрезвычайно полезно! Он должен показать вам, как достичь желаемого результата — шаг за шагом. Другое это   -  person marc_s    schedule 02.11.2011


Ответы (1)


Вот пример раздела конфигурации, который я создал. Должен указать вам правильное направление.

public class ImportConfiguration : ConfigurationSection
{
    [ConfigurationProperty("importMap")]
    public ImportMapElementCollection ImportMap
    {
        get
        {
            return this["importMap"] as ImportMapElementCollection;
        }
    }
}

public class ImportColumnMapElement : ConfigurationElement
{
    [ConfigurationProperty("localName", IsRequired = true, IsKey = true)]
    public string LocalName
    {
        get
        {
            return this["localName"] as string;
        }
        set
        {
            this["localName"] = value;
        }
    }

    [ConfigurationProperty("sourceName", IsRequired = true)]
    public string SourceName
    {
        get
        {
            return this["sourceName"] as string;
        }
        set
        {
            this["sourceName"] = value;
        }
    }
}

public class ImportMapElementCollection : ConfigurationElementCollection
{
    public ImportColumnMapElement this[object key]
    {
        get
        {
            return base.BaseGet(key) as ImportColumnMapElement;
        }
    }

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

    protected override string ElementName
    {
        get
        {
            return "columnMap";
        }
    }

    protected override bool IsElementName(string elementName)
    {
        bool isName = false;
        if (!String.IsNullOrEmpty(elementName))
            isName = elementName.Equals("columnMap");
        return isName;
    }

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

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((ImportColumnMapElement)element).LocalName;
    }
}

И здесь он используется в web.config:

<importConfiguration>
    <importMap>
        <columnMap localName="PropertyID" sourceName="Detail Number"/>
        <columnMap localName="DateOfOpen" sourceName="Open Date &amp; Time"/>
        <columnMap localName="StartTime" sourceName="Open Date &amp; Time"/>
        <columnMap localName="ClosingTime" sourceName="Close Date &amp; Time"/>
        <columnMap localName="StreetAddress" sourceName="Street Address"/>
    </importMap>
</importConfiguration>
person James Johnson    schedule 02.11.2011
comment
Спасибо. Я думаю, это то, что мне нужно. - person Timur Mustafaev; 02.11.2011
comment
Для полноты реализуйте с помощью: ImportConfiguration columns = (ImportConfiguration)ConfigurationManager.GetSection("importConfiguration"); foreach (ImportColumnMapElement col in columns.ImportMap) { Debug.Write(col.localName + col.sourceName); } - person amackay11; 22.09.2016