2011-10-06 5 views
6

Mam konsola oparta MEF aplikacja hosta (CompositionContainer), z których ładunki Wolne zespoły plugin oparciu o parametr wiersza poleceń, na przykład:Wykorzystując metody dostępne w plugin1 w plugin2 przez MEF

app.exe plugin1 

załaduje host (app.exe) i plugin1. Rozwiązanie VS jest skonstruowane w taki sposób, że każda wtyczka ma swój własny projekt (stąd jego własny montaż).

Istnieje zbiór wtyczek, z których niektóre mają możliwość ponownego użycia kodu. Na przykład plugin1 ma metodę CopyFiles(string fileName) i ta sama funkcja ma być używana przez plugin2.

Teraz w tradycyjnej aplikacji konsolowej można dodać odniesienie do plugin1.dll i używając tej przestrzeni nazw, zajmij się ponownym wykorzystaniem.

Jestem ciekawy, czy istnieje sposób "MEF", jeśli chcesz, wdrożenia tego ponownego użycia. Tak więc, coś na kształt stworzenia obiektu plugin1 w plugin2 poprzez dodanie atrybutu Import do eksportowanego interfejsu i umożliwienie MEF zaopiekowania się resztą. Czy to jest możliwe? A jeśli tak, to w jaki sposób?

Czy istnieje lepsze podejście, które należy zastosować podczas projektowania takich aplikacji? Bonus voodoo za wszelkie wskazówki do przydatnych zasobów edukacyjnych i wyjaśnień.

Dzięki!

Odpowiedz

2

Jeśli metoda, którą chcesz udostępnić, znajduje się pod numerem plugin1, możesz uzyskać Exportplugin1. Możesz również zastosować metodę, jeśli chcesz tylko udostępnić tę metodę.

plugin2 będzie Import wtyczka1. MEF zajmie się resztą. Jeśli otrzymujesz swoje złoenia z wiersza poleceń i tworzysz AssemblyCatalog dla , musisz również powiedzieć o plugin2 i umieścić go w AggregateCatalog lub umieścić wszystkie w katalogu i użyć DirectoryCatalog (możesz przekazać nazwa katalogu w wierszu poleceń).

The MEF Programming Guide obejmuje podobne scenariusze.

Dostępne są również "Hands-on-Labs" dla MEF w Visual Studio 2010 and .NET Framework 4 Training Kit, które są pomocne.