Я пытаюсь понять это уже несколько дней, но безуспешно.
Я пытаюсь использовать [ImportMany] для импорта из каталога, полного DLL с экспортом типа IEditorSystem, которые имеют пользовательские метаданные типа IEditorSystemMetadata.Я хотел бы сначала получить метаданные и отправить их в некоторые текстовые поля и т. Д., Чтобы пользователь мог выбрать, какую систему EditorSystem использовать, и при выборе загрузить эту систему ...
Я следовал примерамНасколько я могу, вот что у меня есть.
[ImportMany]
public ObservableCollection<Lazy<IEditorSystem, IEditorSystemMetadata>> EditorSystemList
Это то, что он должен импортировать:
[Export(typeof(IEditorSystem))]
[SignalSystemData("Very Very Long Name", "Short Name")]
public class MyEditorSystem: IEditorSystem
{
public MyEditorSystem()
{
}
}
и запуск:
AggregateCatalog Catalog = new AggregateCatalog(
new DirectoryCatalog(@".\EditorSystems"),
new AssemblyCatalog(Assembly.GetExecutingAssembly()));
CompositionContainer Container = new CompositionContainer(Catalog);
Container.ComposeParts(this);
Я могу видеть в Catalog.Parts и MyEditorSystem и viewmodel, у которого есть ImportMany, но EditorSystemList никогда не заполняется.Я не получаю ошибок композиции.
Я подумал, что это может быть как-то связано с Lazy <>, поэтому я попытался
public ObservableCollection<IEditorSystem> EditorSystemList
Не повезло.
ЕдинственноеЯ могу подумать, что я использую Cinch, который использует MEFedMVVM, который также использует MEF.Я не думаю это мешает, но я не совсем уверен.
Я полагаю, что я делаю это неправильно, кто-нибудь может понять это?
Обновление:
Реализация нового IComposer с именно тем каталогом, который вам нужен.
ImportMany все еще не работает, но только когда я пытаюсь импортировать метаданные вместе с ним.Метаданные - это всего лишь пара строк, и, насколько я могу определить, следует примерам.
НАКОНЕЦ нашел причину: реализации IEditorSystem находятся в отдельной DLL, как отмечалось ранее.Однако любые новые сборки dll не копируются в выходной подкаталог основного проекта.Я скопировал первый вручную и забыл добавить копию пост-сборки в проект dll.О, хорошо, узнал много вещей о MEF, так что не совсем потраченные впустую дни :)