Използване на методи, налични в 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 плъгин1. MEF ще се погрижи за останалото. Ако получавате своите сборки от командния ред и създавате AssemblyCatalog за plugin1, тогава ще трябва също да му кажете за plugin2 и да го поставите в AggregateCatalog, или да ги поставите всички в директория и да използвате DirectoryCatalog (можете да предадете име на директория в командния ред).

Ръководството за програмиране на MEF обхваща подобни сценарии.

Има също така практически лаборатории за MEF в Visual Studio 2010 и . NET Framework 4 Training Kit, които са полезни.

person Jim Counts    schedule 06.10.2011