2011-06-01 58 views
7

隨着.NET4的發佈,任何人都創建了一個動態web.config元素,它只是讓你輸入任何你想要的配置,然後你可以訪問它關閉dynamic對象?自由格式動態web.config區域

進入創建自定義配置節的工作量似乎沒有理由超過頂部。這導致我想知道是否有人已經替換了容易需要創建5個以上的類的歌曲和舞蹈來每次都滾動新的配置部分。

(注意,當我說免費的形式我當然希望它符合一個有效的XML元素)

回答

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

+0

+1和接受,我正在考慮創建一個FOSS項目,並且你給了我一個短暫的起點。 – 2011-06-06 21:29:42