我的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的情况下遍历cities并返回type的代码。
即
if the given id = "ny" --> return nameSpace1
if the given id = "dc" --> return nameSpace2
if the given id = "nj" --> return nameSpace3发布于 2012-11-13 21:46:49
您需要对该部分进行引用:
var theSection = (TypeOfSection)ConfigurationManager.GetSection("mySection");注意TypeOfSection的类型转换-这是在配置文件中声明的类型。
此时,您应该拥有一个可以访问和迭代的强类型对象。
发布于 2019-04-18 11:43:11
在我的回答中,我假设您已经编写了一个实现ConfigurationSection的类,其中包含一个城市集合。-12年11月13日13:50
前面的答案在技术上是正确的,尽管我觉得它缺乏细节。我将尝试详细阐述@Oded response,希望这将是一个清晰的展示!
步骤
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);
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()方法还有几个值得一看的重载,这些重载允许您配置如果找不到具有给定名称的类型时会发生什么,以及搜索是否应区分大小写等。)
我希望这个答案对你的情况是明确和有用的,如果你有任何我没有完全回答的问题,请留下评论,我一定会更新一些额外的详细说明的答案!
https://stackoverflow.com/questions/13361734
复制相似问题