Использование методов, доступных в plugin1 в plugin2 через MEF - PullRequest
6 голосов
/ 06 октября 2011

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

app.exe plugin1

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

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

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

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

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

Спасибо!

1 Ответ

2 голосов
/ 06 октября 2011

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

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

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

Есть также практические занятияПолезные ярлыки для MEF в Visual Studio 2010 и .NET Framework 4 , которые полезны.

...