自由格式动态web.config区域
随着.NET4的发布,任何人都会创建一个动态的web.config元素,它只会让你在配置中输入任何你想要的东西,然后你可以从dynamic
对象中访问它。
创建自定义配置部分的工作量似乎没有理由超过顶部。 这导致我想知道是否有人已经替换了容易需要创建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>
...'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
。