2013-05-18 70 views
4

我正在嘗試爲c#中基於約定的配置聯編程序編寫一個很好的使用者API。 ConfigManager.GetSection(...)返回一個對象,所以我想返回一個動態對象,當轉換爲所需類型時調用一個映射器。將C#DynamicObject強制轉換爲任意類型

在C#4 +中有什麼方法可以創建一個動態類,該類可以在應用了顯式強制轉換後處理調用?

例如

MyConfig config = (MyConfig)ConfigurationManager.GetSection("some/section"); 

在這種情況下,從ConfigurationManager中的動態物體將被執行一些配置魔法施法調用(我已經解決了該位)

回答

2

是,DynamicObject有一個覆蓋,能TryConvert。當DynamicObject子類被強制轉換(或隱式轉換爲任務)時,將調用TryConvert,並且可以在返回結果之前從binder參數中獲得關於調用的動態詳細信息。

binder.Type 屬性提供了對象必須轉換到的類型。對於 示例,對於C#中的語句(String)sampleObject (Visual Basic中的CType(sampleObject,Type)),其中sampleObject是從DynamicObject類派生的類的 實例, binder.Type返回String類型。 binder.Explicit屬性 提供了有關發生的轉換類型的信息。它 對顯式轉換返回true,對於隱式 轉換返回false。

+1

謝謝。我在詢問之前(實現了DynamicObject的每個虛擬方法)並且剛剛看到異常被提出 - 我發現它們是第一次偶然異常,並且在TryConvert被調用之前我很憤怒。 –

1

有很多項目可以滿足您的需求。

例如查看AutoConfig

+0

謝謝 - 這個項目部分是快樂的,但它也會比AutoConfig做得更多 - 例如支持任意複雜的對象圖,集合和自定義綁定器(和POCO) –

+0

如果您有興趣,我完成了這個項目 - http://www.github.com/spadger/simple-config –

相關問題