Использование методов, доступных в plugin1 в plugin2 через MEF

У меня есть консольное приложение MEF, хост (CompositionContainer) которого загружает доступные сборки плагинов на основе параметра командной строки, например:

app.exe plugin1

загрузит хост (app.exe) и plugin1. Решение VS структурировано таким образом, что у каждого плагина есть собственный проект (следовательно, это собственная сборка).

Существует набор плагинов, некоторые из которых имеют возможность повторного использования кода. Так, например, у plugin1 есть метод CopyFiles(string fileName), и эта же функциональность должна использоваться plugin2.

Теперь в традиционном консольном приложении можно добавить ссылку на plugin1.dll и, используя это пространство имен, заняться его повторным использованием.

Мне любопытно, есть ли способ "MEF" для реализации этого повторного использования. Итак, что-то вроде создания объекта plugin1 в plugin2 путем добавления атрибута Import в plugin1's экспортируемый интерфейс и позволяя MEF позаботиться обо всем остальном. Это возможно? И если да, то как?

Или есть лучший подход, который следует использовать при разработке таких приложений? Бонус вуду за любые указатели на полезные учебные ресурсы и объяснения.

Спасибо!


person aateeque    schedule 06.10.2011    source источник


Ответы (1)


Если метод, которым вы хотите поделиться, находится в plugin1, вы должны Export plugin1. Вы также можете Export использовать метод, если хотите просто поделиться этим методом.

plugin2 будет Import plugin1. Об остальном позаботится MEF. Если вы получаете свои сборки из командной строки и создаете AssemblyCatalog для plugin1, вам также нужно будет сообщить ему о plugin2 и поместить его в AggregateCatalog, или поместить их все в каталог и использовать DirectoryCatalog (вы можете передать имя каталога в командной строке).

Похожие сценарии описаны в Руководстве по программированию MEF.

Также существуют практические занятия по MEF в Visual Studio 2010 и. NET Framework 4 Training Kit, которые могут оказаться полезными.

person Jim Counts    schedule 06.10.2011