7
隨着.NET4的發佈,任何人都創建了一個動態web.config元素,它只是讓你輸入任何你想要的配置,然後你可以訪問它關閉dynamic
對象?自由格式動態web.config區域
進入創建自定義配置節的工作量似乎沒有理由超過頂部。這導致我想知道是否有人已經替換了容易需要創建5個以上的類的歌曲和舞蹈來每次都滾動新的配置部分。
(注意,當我說免費的形式我當然希望它符合一個有效的XML元素)
隨着.NET4的發佈,任何人都創建了一個動態web.config元素,它只是讓你輸入任何你想要的配置,然後你可以訪問它關閉dynamic
對象?自由格式動態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>
...的「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
。
+1和接受,我正在考慮創建一個FOSS項目,並且你給了我一個短暫的起點。 – 2011-06-06 21:29:42