#c#
Вопрос:
Как я могу изменить приведенный ниже файл app.config, чтобы он имел вложенные параметры конфигурации :
<configuration>
<configSections>
<section name="registerCompanies" type="My.MyConfigSection, My" />
</configSections>
<registerCompanies>
<add name="Tata Motors" code="Tata"/>
<add name="Honda Motors" code="Honda"/>
</registerCompanies>
</configuration>
Пример вложенной конфигурации :
<configuration>
<configSections>
<section name="registerCompanies" type="My.MyConfigSection, My" />
</configSections>
<registerCompanies>
<company task = "1">
<add name="Tata Motors" code="Tata"/>
</company>
<company task = "2">
<add name="Honda Motors" code="Honda"/>
<company>
.
.
.
</registerCompanies>
</configuration>
Ниже приведены мое пространство имен и класс, которые нуждаются в модификации для работы с вложенной конфигурацией:
using System.Configuration;
using System.Linq;
namespace My
{
public class MyConfigSection : ConfigurationSection
{
[ConfigurationProperty("", IsRequired = true, IsDefaultCollection = true)]
public MyConfigInstanceCollection Instances
{
get { return (MyConfigInstanceCollection)this[""]; }
set { this[""] = value; }
}
}
public class MyConfigInstanceCollection : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new MyConfigInstanceElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
//set to whatever Element Property you want to use for a key
return ((MyConfigInstanceElement)element).Name;
}
public new MyConfigInstanceElement this[string elementName]
{
get
{
return this.OfType<MyConfigInstanceElement>().FirstOrDefault(item => item.Name == elementName);
}
}
}
public class MyConfigInstanceElement : ConfigurationElement
{
//Make sure to set IsKey=true for property exposed as the GetElementKey above
[ConfigurationProperty("name", IsKey = true, IsRequired = true)]
public string Name
{
get { return (string)base["name"]; }
set { base["name"] = value; }
}
[ConfigurationProperty("code", IsRequired = true)]
public string Code
{
get { return (string)base["code"]; }
set { base["code"] = value; }
}
}
}
В настоящее время он работает для обычного пользовательского приложения.config. Однако я хочу иметь вложенные конфигурации, как я показал в примере, где каждая компания классифицируется внутри задачи, а затем пользователи позже вручную добавляют дополнительные задачи, если хотят, без изменения кода. И я хочу пройтись по реестрам компаний, а затем по каждой отдельной задаче, а также обработать данные.
Комментарии:
1. Или просто перейдите в ConfigurationBuilder и используйте файлы json и типизированные конфигурации. App.Config-это старый сломанный способ работы с фреймворком