首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何遍历configurationSection

如何遍历configurationSection
EN

Stack Overflow用户
提问于 2012-11-13 21:39:59
回答 2查看 2.7K关注 0票数 5

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

代码语言:javascript
复制
<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的情况下遍历cities并返回type的代码。

代码语言:javascript
复制
 if the given id = "ny" --> return nameSpace1
 if the given id = "dc" --> return nameSpace2
 if the given id = "nj" --> return nameSpace3
EN

回答 2

Stack Overflow用户

发布于 2012-11-13 21:46:49

您需要对该部分进行引用:

代码语言:javascript
复制
var theSection = (TypeOfSection)ConfigurationManager.GetSection("mySection");

注意TypeOfSection的类型转换-这是在配置文件中声明的类型。

此时,您应该拥有一个可以访问和迭代的强类型对象。

票数 1
EN

Stack Overflow用户

发布于 2019-04-18 11:43:11

在我的回答中,我假设您已经编写了一个实现ConfigurationSection的类,其中包含一个城市集合。-12年11月13日13:50

前面的答案在技术上是正确的,尽管我觉得它缺乏细节。我将尝试详细阐述@Oded response,希望这将是一个清晰的展示!

步骤

  1. 这里要做的第一件事是实现一个新的类,MyConfigSection,它只是一个标准的POCO (普通旧C对象),它具有您将存储在配置源中的每个配置值的属性。

公共类MyConfigSection {公共City[] Cities {get;set;} }

注意:我们使用一个类型为City的对象数组,这是为了根据您的特定用例需要允许多个条目,尽管您不受任何给定类型的限制。在这种情况下,类的结构如下所示:

public class City { public string Id {get;set;} public string Type {get;set;} }

  • 在您选择的源代码中创建配置部分,并将该部分命名为与预期用途相对应的名称,在本例中,我们将该部分称为mySection以匹配原始问题。

  • 现在的关键步骤是将MyConfigSection poco绑定到所需的配置设置部分。我们可以通过在启动类中添加以下代码来实现这一点,而不必通过IOptions<T>接口:

var configSection = services.AddSingleton(configSection);

  • After MyConfigSection();Configuration.Bind("mySection",configSection);var添加绑定,并向服务容器注册结果对象,现在可以通过依赖项注入在代码库中的任何位置使用它,只需在需要存储在上述配置中的值的任何方法中包含MyConfigSection类型的参数。

公共类型GetCityType(string cityId,MyConfigSection config) { var typeName = config.Cities .Where(x => x.Id == cityId) .Select(x => x.Type);return Type.GetType(typeName);}

在这个特定的场景中,设置值的使用稍微复杂一些,因为您正在处理一个附加poco类型的数组,尽管在LINQ的帮助下,从Cities数组中检索所需的值变得非常简单。在获得对应于该类型的字符串并将其存储在typeName变量中之后,可以使用反射返回实际的Type对象,而不仅仅是字符串,如上所述。( GetType()方法还有几个值得一看的重载,这些重载允许您配置如果找不到具有给定名称的类型时会发生什么,以及搜索是否应区分大小写等。)

我希望这个答案对你的情况是明确和有用的,如果你有任何我没有完全回答的问题,请留下评论,我一定会更新一些额外的详细说明的答案!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13361734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档