【问题标题】:DynamicObject - invoking method based on argument valueDynamicObject - 基于参数值调用方法
【发布时间】:2011-03-09 04:58:32
【问题描述】:

我希望能够存储一个 Actions 字典,并能够根据字典的键调用它们。如果未找到密钥,则不会调用任何操作。我有一个想法,即使用扩展 DynamicObject 的对象执行调用,并在构造时获取操作字典,但是如何使用 DynamicObject 的所有示例都基于属性,而不是方法。 我希望能够做这样的事情:

`dynamicDictionary.InvokeMethod(commandName);`

【问题讨论】:

    标签: c# dynamicobject


    【解决方案1】:

    开源框架Dynamitey 将执行此操作。对于动作字典,您可以使用 MS 内置的 ExpandoObjectDynamitey 构造一个 DynamicObjects.BaseDictionary ,它将像字典的代理一样工作。

    如果您将任一操作作为属性填充,则它们可以作为方法调用。如果需要通过字符串名称调用它们,可以使用Dynamic.InvokeAction(dynamicDictionary, commandName)。这使用 DLR 调用比静态对象上的反射更快的方法,并使其在动态对象上成为可能。

    【讨论】:

    • 有没有办法设置默认操作,这样当没有找到请求的操作时,默认会启动?
    • @Sean 只是 ImpromptuDictionary and override TryInvokeMember 的子类,然后您可以调用基本实现,如果它返回 false,则执行默认操作并返回 true。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多