Пользовательский web.config разделяет (ASP.NET)

Извинения заранее за относительно длинное сообщение - я попытался предоставить столько релевантной информации, сколько я могу (включая листинги кода)!

Я работал над реализацией пользовательского раздела в web.config файле для немного чего-то, что я работаю в течение прошлых нескольких часов, но я, может казаться, не получаю его работа. Следующее - то, что я хотел бы использовать в качестве своей структуры XML:

<mvcmodules>
    <module moduleAlias="name" type="of.type">
        <properties>
            <property name="propname" value="propvalue" />
        </properties>
    </module>
</mvcmodules>

В настоящее время у меня есть продолжающий набор классов и работающий (несколько):

  • ModuleSection
  • ModuleCollection
  • Модуль
  • ModulePropertyCollection
  • ModuleProperty

Единственный путь 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;
        }
    }
}
6
задан Andy Hunt 19 June 2010 в 12:19
поделиться

1 ответ

Я думаю, вам нужно создать свойство, украшенное атрибутом ConfigurationCollectionAttribute. Я просканировал ваш код и нигде не увидел ссылки на него.

Ссылка на MSDN в кои-то веки содержит полезный пример. Я сам недавно создавал пользовательский раздел config и нашел эту страницу вполне адекватной. Смотрите мой вопрос о том, как включить поддержку Intellisense для вашего раздела config в Visual Studio.

3
ответ дан 17 December 2019 в 18:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: