我要做的是让它发挥作用:
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(...)(...)实际上有效?
答案 0 :(得分:1)
致电ExportedDelegate.CreateDelegate。传递你想要的代表类型(即Action)。 MEF使用ExportedDelegate,因此您不限于使用Action&lt;&gt;和Func&lt;&gt;委托,但可以使用任何具有匹配签名的委托类型。
您可能还需要在传递给ImportDefinition构造函数的约束中指定合同名称,而不是仅传递a => true
。