你如何通过后期绑定调用通过MEF导出的代理?

时间:2010-11-28 20:13:21

标签: dynamic mef

我要做的是让它发挥作用:

GetMethod(Key key)(...some arguments...)

“......一些参数......”在GetMethod的每次调用之间都有所不同,包括参数的数量,因此没有特定的Action< ...>我可以使用。

现在GetMethod查看参数列表以查找Tuple列表中的匹配并返回Tuple的第二个参数,即动态。此列表是使用MEF

创建的
<some CompositionContainer>.GetExports(new ImportDefinition(a => true, "...", ImportCardinality.ZeroOrMore, true, false))
            .Select(e => (Tuple<Key, dynamic>)Tuple.Create((Key)e.Metadata["Key"], e.Value))
            .ToList();

现在,似乎typle中的第二项实际上并不是相应类型的Action,而是ExportedDelegate。有没有办法使第二项实际上是一个正确的Action,以便GetMethod(...)(...)实际上有效?

1 个答案:

答案 0 :(得分:1)

致电ExportedDelegate.CreateDelegate。传递你想要的代表类型(即Action)。 MEF使用ExportedDelegate,因此您不限于使用Action&lt;&gt;和Func&lt;&gt;委托,但可以使用任何具有匹配签名的委托类型。

您可能还需要在传递给ImportDefinition构造函数的约束中指定合同名称,而不是仅传递a => true