Как вы называете делегата, экспортируемого через MEF с поздним связыванием? - PullRequest
2 голосов
/ 28 ноября 2010

Я пытаюсь сделать так, чтобы это работало:

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

«... некоторые аргументы ...» варьируются между каждым вызовом GetMethod, в том числе в количестве параметров, поэтомунет конкретного действия <...>, которое я могу использовать.

Теперь 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();

. Теперь, похоже, что второй элемент в типе на самом деле не является действием соответствующего типа, а скорее ExportedDelegate.Есть ли способ сделать так, чтобы второй элемент был на самом деле правильным действием, чтобы GetMethod (...) (...) действительно работал?

1 Ответ

1 голос
/ 29 ноября 2010

Вызов ExportedDelegate.CreateDelegate .Передайте тип делегата, который вы хотите (например, действие).MEF использует ExportedDelegate, так что вы не ограничены использованием делегатов Action <> и Func <>, но можете использовать любой тип делегата с совпадающей подписью.

Возможно, вам также потребуется указать имя контракта в ограничениивы переходите к конструктору ImportDefinition вместо простой передачи a => true.

...