#c# #.net #configuration #configurationsection
#c# #.net #конфигурация #конфигурационная секция
Вопрос:
Я использую интерфейс IConfigurationSectionHandler для получения информации о моем разделе пользовательских конфигураций. Но это устарело, и я хочу вместо этого использовать 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/>
Комментарии:
1. Вы должны ознакомиться с серией из трех частей Джона Ристы о настройке .NET 2.0 в CodeProject. — Разгадка тайн конфигурации .NET 2.0 — Расшифровка тайн конфигурации .NET 2.0 — Разгадка тайн конфигурации .NET 2.0 Настоятельно рекомендуется, хорошо написано и чрезвычайно полезно! Он должен показать вам, как достичь желаемого результата — шаг за шагом. Другой он
Ответ №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;amp; Time"/>
<columnMap localName="StartTime" sourceName="Open Date amp;amp; Time"/>
<columnMap localName="ClosingTime" sourceName="Close Date amp;amp; Time"/>
<columnMap localName="StreetAddress" sourceName="Street Address"/>
</importMap>
</importConfiguration>
Комментарии:
1. Для полноты реализуйте с :
ImportConfiguration columns = (ImportConfiguration)ConfigurationManager.GetSection("importConfiguration"); foreach (ImportColumnMapElement col in columns.ImportMap) { Debug.Write(col.localName col.sourceName); }