2010-11-28 13 views
2

これが機能するために私は何をしようとしていることである:遅延バインディングでMEF経由でエクスポートされたデリゲートをどのように呼び出すのですか?

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

「...いくつかの引数が...」パラメータの数に含め、GetMethodの各呼び出しの間で変化しないので、何があります特定のアクション< ...>私が使用することができます。

これで、GetMethodは引数リストを調べてTupleのリスト内で一致するものを見つけ出し、そのTupleの第2引数を返します。このリストは

<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(); 

でMEFを使用して作成された、typleの2番目の項目は、実際に適切なタイプのアクションではなく、ExportedDelegateではないようです。 GetMethod(...)(...)が実際に動作するように、2番目の項目が実際に正しいActionであるようにする方法はありますか?

答えて

1

ExportedDelegate.CreateDelegateを呼び出します。必要な代理人のタイプ(つまり、アクション)を渡します。 MEFはExportedDelegateを使用して、アクション<>およびFunc <>代理人を使用することに制限されませんが、一致する署名を持つ任意の代理人タイプを使用できます。

a => trueを渡すのではなく、ImportDefinitionコンストラクタに渡す制約にコントラクト名を指定する必要があります。

+0

私が探しているデリゲートを知る必要があるので、私のシナリオ(GetMethod(...)(...)を使用して)はこれまでどおりに動作しません。私は、それが渡された引数で呼び出されるExportedDelegateを単に伝えることはできませんか? – Jamie

+0

いいえ、ある時点で、デリゲートタイプが何である必要があるかを知る必要があります。 –

+0

よろしくお願いします。私が望んでいた答えではありませんでしたが、それについては何もできません。 – Jamie

関連する問題