Импорт многих экземпляров с использованием MEF - PullRequest
7 голосов
/ 09 марта 2012

Я экспортирую некоторые классы, реализующие интерфейс IFoo, подобный этому

public interface IFoo { }

[Export("A", typeof(IFoo))]
public class Foo1 : IFoo { }

[Export("B", typeof(IFoo))]
public class Foo2 : IFoo { }

Когда я пытаюсь импортировать один из них, используя

 containter.GetExportedValue<IFoo>("A"); 

, он работает хорошо, но когда я пытаюсьимпортировать все из них, как это

[ImportMany]
IFoo[] foos;

не работает.

Может кто-нибудь сказать мне, как решить эту проблему?

Ответы [ 2 ]

9 голосов
/ 09 марта 2012

Чтобы сделать это обоими способами, объявите 2 экспорта:

public interface IFoo { }

[Export(typeof(IFoo))]
[Export("A", typeof(IFoo))]
public class Foo1 : IFoo { }

[Export(typeof(IFoo))]
[Export("B", typeof(IFoo))]
public class Foo2 : IFoo { }

Тогда он должен работать (я сделал тестовый образец и получил его на работу).

HTH,

Бабы.

3 голосов
/ 09 марта 2012

Удалите названия контрактов из вашего экспорта.

[Export("A", typeof(IFoo))]

Для

[Export(typeof(IFoo))]

В первом сценарии вы экспортируете контракт, который соответствует имени «A» и типу IFoo, в то время как при импорте многих вы импортируете все, что соответствует контракту типа IFoo (без имени контракта), поэтому при экспорте названия контрактов не учитываются

Как уже упоминалось, бабуин, вы можете использовать его обоими способами. Вам следует подумать, нужны ли вам оба в вашем приложении, если это не так, я бы придерживался только одного способа сделать вещи максимально простыми, в противном случае я предлагаю использовать его подход.

...