Извинения заранее за относительно длинное сообщение - я попытался предоставить столько релевантной информации, сколько я могу (включая листинги кода)!
Я работал над реализацией пользовательского раздела в web.config файле для немного чего-то, что я работаю в течение прошлых нескольких часов, но я, может казаться, не получаю его работа. Следующее - то, что я хотел бы использовать в качестве своей структуры XML:
<mvcmodules>
<module moduleAlias="name" type="of.type">
<properties>
<property name="propname" value="propvalue" />
</properties>
</module>
</mvcmodules>
В настоящее время у меня есть продолжающий набор классов и работающий (несколько):
Единственный путь I видит для нахождения рядом со способом, которым я хочу сделать, это должно перенести мои объявления в другого названного родителя. Однако то, когда я делаю это, я получаю ошибку, если у меня есть больше чем один экземпляр тега ("Элемент может только появиться однажды в этом разделе".), и с одним тегом, информация не читается в в объекты.
Я записал немного основной документации, таким образом, можно понять то, как я структурирую это и надо надеяться вижу, где я иду не так, как надо
ModuleSection Этот класс содержит объект ModulesCollection
namespace ASPNETMVCMODULES.Configuration
{
public class ModulesSection : System.Configuration.ConfigurationSection
{
[ConfigurationProperty("modules", IsRequired = true)]
public ModuleCollection Modules
{
get
{
return this["modules"] as ModuleCollection;
}
}
}
ModulesCollection Содержит набор объектов Модуля
namespace ASPNETMVCMODULES.Configuration
{
public class ModuleCollection : ConfigurationElementCollection
{
[ConfigurationProperty("module")]
public Module this[int index]
{
get
{
return base.BaseGet(index) as Module;
}
set
{
if (base.BaseGet(index) != null)
{
base.BaseRemoveAt(index);
}
this.BaseAdd(index, value);
}
}
protected override ConfigurationElement CreateNewElement()
{
return new Module();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((Module)element).ModuleAlias;
}
}
}
Модуль Содержит информацию о модуле и объекте ModulePropertyCollection
public class Module : ConfigurationElement
{
[ConfigurationProperty("moduleAlias", IsRequired = true)]
public string ModuleAlias
{
get
{
return this["moduleAlias"] as string;
}
}
[ConfigurationProperty("type", IsRequired = true)]
public string ModuleType
{
get
{
return this["type"] as string;
}
}
[ConfigurationProperty("properties")]
public ModulePropertyCollection ModuleProperties
{
get
{
return this["properties"] as ModulePropertyCollection;
}
}
}
ModulePropertyCollection Содержит набор объектов ModuleProperty
public class ModulePropertyCollection : ConfigurationElementCollection
{
public ModuleProperty this[int index]
{
get
{
return base.BaseGet(index) as ModuleProperty;
}
set
{
if (base.BaseGet(index) != null)
{
base.BaseRemoveAt(index);
}
this.BaseAdd(index, value);
}
}
protected override ConfigurationElement CreateNewElement()
{
return new ModuleProperty();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ModuleProperty)element).Name;
}
}
ModuleProperty Содержит информацию о свойствах модуля
public class ModuleProperty : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get
{
return this["name"] as string;
}
}
[ConfigurationProperty("value", IsRequired = true)]
public string Value
{
get
{
return this["value"] as string;
}
}
}
Я думаю, вам нужно создать свойство, украшенное атрибутом ConfigurationCollectionAttribute. Я просканировал ваш код и нигде не увидел ссылки на него.
Ссылка на MSDN в кои-то веки содержит полезный пример. Я сам недавно создавал пользовательский раздел config и нашел эту страницу вполне адекватной. Смотрите мой вопрос о том, как включить поддержку Intellisense для вашего раздела config в Visual Studio.