如何循环遍历 configurationSection

5

我在我的 Web.config 文件中有以下部分:

<configSections>
    <section name="mySection" type="myNameSpace, myProject"/>
</configSections>


<mySection>
    <city id="ny" type="nameSpace1" />
    <city id="dc" type="nameSpace2" />
    <city id="nj" type="nameSpace3" />
</mySection>

我将循环遍历给定id的城市,并返回类型。即:

需要编写代码,通过id循环遍历cities并返回type

例如:

 if the given id = "ny" --> return nameSpace1
 if the given id = "dc" --> return nameSpace2
 if the given id = "nj" --> return nameSpace3

嗯,我假设你已经为该部分创建了一个类型 - 就像在你的配置中有type="myNameSpace, myProject"一样。你如何填充该类型呢? - Oded
作为一个新手,我在谷歌和 MSDN 上搜索了一下,发现应该创建一个实现 ConfigurationSection 的类。但是我不知道这个类应该长什么样子。 - bombo
请参见 https://dev59.com/PW865IYBdhLWcg3wM7u0。 - Oded
但是我没有城市元素的索引,我只有ID。 - bombo
你如何实现配置部分取决于你自己。然而,这似乎不是应该放在“configuration”中的信息,看起来更像是属于查找(比如字典)的东西。 - Oded
2个回答

1
您需要引用该部分的参考文献:
var theSection = (TypeOfSection)ConfigurationManager.GetSection("mySection");

请注意将 TypeOfSection 强制转换为配置文件中声明的类型。
现在,您应该拥有一个强类型对象,可以访问和迭代。

谢谢您的回答,但我还是不太明白。我该如何遍历mySection城市,并且在给定城市的ID后能够返回类型(在这种情况下为nameSpace1、nameSpace2或nameSpace3)? - bombo
@Lina - 在我的回答中,我假设你已经编写了一个实现ConfigurationSection接口并具有城市集合的类。 - Oded
如果你能展示给我这个类应该看起来如何,我会非常感激。我在谷歌上找不到一个与我拥有的configurationSection匹配的替代方案。 - bombo
@Lina - 当然你不会找到完全相同的东西。找到类似的并进行更改。 - Oded
提出的解决方案并没有回答这个问题。 - derloopkat

0
在我的回答中,我假设你已经编写了一个实现了ConfigurationSection的类,该类具有一个城市集合。- Oded Nov 13 '12 at 13:50
这个之前的回答在技术上是正确的,尽管我觉得它缺乏细节。我将尝试对@Oded的回答进行详细阐述,希望能够清晰地展示出来!
步骤:
首先要做的是实现一个新类MyConfigSection,这只是一个标准的POCO(Plain Old C Object),它具有每个配置值的属性,这些值将存储在配置源中。 注意: 我们使用的是对象数组,类型为City,这是为了允许多个条目,以满足您特定的用例要求,但您不限于任何给定类型。在这种情况下,该类将结构如下:
创建与所选配置设置部分对应的配置部分,在本例中,我们将调用该部分mySection以匹配原始问题。
现在关键的步骤是将MyConfigSection poco绑定到所需的配置设置部分,我们可以通过在启动类中添加以下代码来实现这一点,而无需通过IOptions<T>接口进行操作:
添加绑定后,注册结果对象到服务容器中,它现在将通过依赖项注入在您的代码库中的任何地方可用,只需在需要从上述配置中存储的值的任何方法中包括一个类型为MyConfigSection的参数即可。
在这种特定情况下,由于您正在处理额外Poco类型的数组,因此使用设置值略微复杂,但是借助LINQ的帮助,从Cities数组检索所需值变得相当简单。在获取对应于类型的字符串并将其存储在typeName变量中之后,您可以使用反射返回实际的Type对象,而不仅仅是一个字符串,如上所示。(GetType()方法还有几个值得一看的重载,它们允许您配置如果找不到给定名称的类型,以及搜索是否应区分大小写等内容。)

我希望这个答案对你的情况清晰且有用,如果你有任何我没有完全回答的问题,只需留下评论,我一定会更新答案并进行更详细的阐述!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接