自由格式动态web.config区域

时间:2011-06-01 15:57:50

标签: c# dynamic .net-4.0 web-config

随着.NET4的发布,有人创建了一个动态web.config元素,它只允许你在配置中输入你想要的任何东西,然后你可以从dynamic对象中访问它吗?

创建自定义配置部分的工作量似乎没有理由超过顶部。这让我想知道是否有人已经取代了歌曲和舞蹈,很容易创建5个以上的课程,每次都会推出一个新的配置部分。

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

1 个答案:

答案 0 :(得分:3)

如果您只想访问配置文件的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>

...'FavoriteNumber'设置可以这样访问:

class Program {
    static void Main(string[] args) {
        dynamic settings = new DynamicSettings(ConfigurationManager.AppSettings);
        Console.WriteLine("The value of 'FavoriteNumber' is: " + settings.FavoriteNumber);
    }
}

请注意,尝试访问未定义的密钥会导致抛出RuntimeBinderException。您可以通过将被覆盖的TryGetMember更改为始终返回true来阻止此操作,在这种情况下,未定义的属性只会返回null