2009-08-24 12 views

Odpowiedz

8

Edytuj: Nie czytaj tej odpowiedzi. To jest żenująco źle. Nie udaje mi się. Przeczytaj Glenn Block poniżej.

To nie jest oczywiste, ale to samo pytanie: Managed Extensibility Framework (MEF) vs. Composite UI Application Block (CAB)

konsensus w duplikatu postu jest to, że MEF i Prism zapewnić ten sam podstawowy zestaw funkcjonalności w różny sposób, chyba że Prism zapewnia Event Aggregator, który jest środkiem pub-sub komunikacji pomiędzy komponentami aplikacji. Możesz jednak użyć tego z MEF. To naprawdę zależy od preferencji.

+5

Ugh ... Wiem, że to było rok temu i wiele się nauczyłem, ale ta odpowiedź jest naprawdę zła. Posta Glenn Block jest bardziej precyzyjna.Widać to najwyraźniej w tym, że Prism V4 ma opcję * użycia * MEF dla różnych form IoC i kompozycji. Nie mogę usunąć ani nawet opublikować mojego posta. –

+6

To dziwne czytanie i powiedzenie "kto jest tym głupcem? ... oh" –

+3

+1 za czystą uczciwość. Chociaż twoja odpowiedź nie jest "najbardziej poprawna", daje wgląd w przeciwieństwie do odpowiedzi Glenna. Linie odpowiedzialności/funkcjonalności pomiędzy MEF/Prism/Unity/MAF są dość nieostre (i nie zasługujesz na awans). – Doug

36

Dzisiaj powiedziałbym, że Pryzmat i MEF wzajemnie się uzupełniają. Podobnie jak Pryzmat i jedność. Prism wprowadza zestaw określonych usług, takich jak RegionManager, DelegateCommand i EventAggregator, które pomagają w tworzeniu złożonych aplikacji. Z drugiej strony MEF jest bardziej ogólnym mechanizmem składu dla rozszerzalności aplikacji i frameworków, niezależnie od tego, czy są to kompozyty, czy nie. Kluczem odróżniającym MEF jest jego wykrywalność, co oznacza, że ​​może on dynamicznie wychodzić i odkrywać wszystkie dostępne części.

Być może zainteresuje Cię sprawdzenie projektu MEF contrib (mefcontrib.codeplex.com), który zawiera warstwę integracyjną dla Unity i MEF. Z tym rozszerzeniem Unity zarządza MEF za kulisami, więc nie walczysz z dwoma contianerami. Zaletą jest to, że pozwala używać Unity dla ogólnych Pocos i MEF do odkrywania rozszerzeń. W związku z tym, że Prism jest obecnie zbudowany na Unity, możesz go użyć do wzmocnienia MEF. Aby użyć projektu contrib, będziesz musiał wprowadzić drobne zmiany w swoim Unity Bootstrapper, ale powinno to być dość trywialne.

Istnieje na pewno pewne pokrywanie się. Miejsce, w którym jest najbardziej widoczne, dotyczy modułów. Pryzmat wykorzystuje moduł w celu odkrycia. W MEF każdy komponent może być częścią i może być dynamicznie wykrywany. Oznacza to, że przy MEF masz modułowość od góry do dołu, a w przypadku Pryzmata moduły są bardziej ziarnistymi jednostkami. Aplikacje złożone to zdecydowanie obszar, którym zajmujemy się w czasie MEF. Z czasem jest całkiem prawdopodobne, że coraz więcej osób będzie wspierać tworzenie takich aplikacji w samym programie MEF. Pracujemy z p & p, aby upewnić się, że tak się stanie, jest płynne przejście.

+0

Należy jednak pamiętać, że [wsparcie dla MEF w Prism dobiega końca] (https://github.com/PrismLibrary/Prism): "MEF jest obsługiwany przez WPF w celu zapewnienia zgodności z poprzednimi wersjami. Nie zostanie dodany do Windows 10 UWP ani Xamarin Forms. " – Informagic

0

MEF nigdy nie zastąpi pryzmat

MEF jest to manager.its wtrysku zależność nie pojemnik wtrysk zależność.
MEF umożliwia przypisywanie eksportu i importu w sposób niedokładnie przy użyciu atrybutów.

Prism z MEF daje możliwość automatycznego wykrywania bibliotek dll oraz możliwość dodawania i usuwania wtyczek poprzez dodawanie lub usuwanie bibliotek dll. Gdzie jako pryzmat daje agregator zdarzeń, menedżer regionu, lokalizator usług.

Można użyć pryzmatu bez MEF. Istnieje wiele innych opcji, takich jak ninject, jedność i inne kontenery DI.

Możesz użyć MEF z pryzmatem do budowania rozszerzalnych aplikacji opartych na wtyczkach.

Powiązane problemy