Заранее извиняюсь за относительно длинный пост - я пытался предоставить как можно больше необходимой информации (включая списки кодов)!
Я работаю над реализацией пользовательского раздела в ИнтернетеФайл .config для чего-то, над чем я работаю последние несколько часов, но я не могу заставить его работать.Вот что я хотел бы использовать в качестве своей XML-структуры:
<mvcmodules>
<module moduleAlias="name" type="of.type">
<properties>
<property name="propname" value="propvalue" />
</properties>
</module>
</mvcmodules>
В настоящее время у меня установлены и работают (в некоторой степени) следующие классы:
- ModuleSection
- ModuleCollection
- Module
- ModulePropertyCollection
- ModuleProperty
Единственный способ увидеть, как можно приблизиться к тому, что я хочусделать это, чтобы обернуть мои объявления в другой родительский по имени.Однако, когда я делаю это, я получаю сообщение об ошибке, если у меня есть более одного экземпляра тега («Элемент может появиться только один раз в этом разделе.»), И с одним тегом информация не читается вобъекты.
Я написал небольшую базовую документацию, чтобы вы могли понять, как я это структурирую, и, надеюсь, увидеть, где я ошибаюсь
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 Содержит коллекцию объектов Module
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;
}
}
}
Module Содержит информацию о модуле и объекте 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;
}
}
}