gpt4 book ai didi

c# - 自定义 web.config 部分 (ASP.NET)

转载 作者:太空狗 更新时间:2023-10-29 21:52:14 39 4
gpt4 key购买 nike

提前为相对较长的帖子道歉 - 我已尽力提供尽可能多的相关信息(包括代码 list )!

过去几个小时我一直致力于在 web.config 文件中实现一个自定义部分,但我似乎无法让它工作。以下是我想用作我的 XML 结构的内容:

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

目前,我设置并运行了以下类(某种程度上):

  • 模块部分
  • 模块集合
  • 模块
  • 模块属性集合
  • 模块属性

我能看到接近我想要的方式的唯一方法是将我的声明包装在另一个名为 .但是,当我这样做时,如果我有多个标签实例(“该元素可能只在本节中出现一次。”),并且使用一个标签,则不会将信息读入对象。

我已经写了一些基本文档,因此您可以了解我是如何构建它的,并希望看到我哪里出错了

模块部分这个类持有一个 ModulesCollection 对象

namespace ASPNETMVCMODULES.Configuration
{
public class ModulesSection : System.Configuration.ConfigurationSection
{
[ConfigurationProperty("modules", IsRequired = true)]
public ModuleCollection Modules
{
get
{
return this["modules"] as ModuleCollection;
}
}
}

模块集合持有 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;
}
}

模块包含有关模块和 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;
}
}
}

模块属性集合包含 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;
}
}

模块属性保存有关模块属性的信息

    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 链接实际上有一个有用的示例。我最近自己整理了一个自定义配置部分,发现该页面完全足够。参见 my question了解如何为 Visual Studio 中的配置部分启用 Intellisense 支持。

关于c# - 自定义 web.config 部分 (ASP.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3075442/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com