C# 自由格式动态web.config区域

C# 自由格式动态web.config区域,c#,dynamic,.net-4.0,web-config,C#,Dynamic,.net 4.0,Web Config,随着.NET4的发布,是否有人创建了一个动态web.config元素,它只允许您在配置中键入任何需要的内容,然后您就可以通过动态对象访问它 创建自定义配置节的工作量似乎无缘无故地超过了上限。这让我想知道是否有人已经取代了轻松创建5+类来每次滚动一个新配置部分的歌舞 (注意,当我说自由形式时,我显然希望它符合有效的xml元素)如果您只想访问配置文件的appSettings部分,您可以从DynamicObject类继承并重写TryGetMember方法: public class DynamicSe

随着.NET4的发布,是否有人创建了一个动态web.config元素,它只允许您在配置中键入任何需要的内容,然后您就可以通过
动态
对象访问它

创建自定义配置节的工作量似乎无缘无故地超过了上限。这让我想知道是否有人已经取代了轻松创建5+类来每次滚动一个新配置部分的歌舞


(注意,当我说自由形式时,我显然希望它符合有效的xml元素)

如果您只想访问配置文件的
appSettings
部分,您可以从
DynamicObject
类继承并重写
TryGetMember
方法:

public class DynamicSettings : DynamicObject {
    public DynamicSettings(NameValueCollection settings) {
        items = settings;
    }

    private readonly NameValueCollection items;

    public override bool TryGetMember(GetMemberBinder binder, out object result) {
        result = items.Get(binder.Name);
        return result != null;
    }
}
然后,假设这是您的
app.config
文件:

<configuration>
  <appSettings>
    <add key="FavoriteNumber" value="3" />
  </appSettings>
</configuration>

请注意,尝试访问未定义的密钥会导致引发
RuntimeBinderException
。您可以通过将重写的
TryGetMember
更改为始终返回
true
,来防止这种情况,在这种情况下,未定义的属性将只返回
null

+1并接受,我曾/正在考虑围绕此创建一个FOSS项目,您给了我一个不太短暂的起点。
class Program {
    static void Main(string[] args) {
        dynamic settings = new DynamicSettings(ConfigurationManager.AppSettings);
        Console.WriteLine("The value of 'FavoriteNumber' is: " + settings.FavoriteNumber);
    }
}