2011-03-09 13 views
3

我希望能夠存儲Actions的字典並能夠根據字典的關鍵字調用這些字典。如果沒有找到密鑰,則不會調用任何操作。我有一個使用擴展DynamicObject的對象執行調用的想法,並且在構建時獲取動作字典,但是接下來的所有使用DynamicObject的示例都是基於屬性而不是方法。 我希望能夠做這樣的事情:DynamicObject - 基於參數值的調用方法

`dynamicDictionary.InvokeMethod(commandName);` 

回答

4

的開源框架ImpromptuInterface會做到這一點。對於您可以使用MS內置的ExpandoObjectImpromputInterface構建的動作字典,其中的ImpromputDictionary可以像字典的代理一樣工作。

如果您將操作填充爲屬性,則可以將其作爲方法調用。如果您需要通過字符串名稱調用它們,則可以使用Impromput.InvokeAction(dynamicDictionary, commandName)。這使用DLR來調用一個方法,它比靜態對象上的反射快,並且可以在動態對象上實現。

+0

這真棒!謝謝。 – 2011-03-13 01:19:54

+0

是否有設置默認操作的方法,以便在未找到請求的操作時,默認會啓動? – 2011-03-13 03:29:11

+0

@Sean只是子類'ImpromptuDictionary並重寫'TryInvokeMember',那麼你可以調用基本實現,如果它返回false,請執行默認操作並返回true。 – jbtule 2011-03-14 04:10:58