Zarządzane ramy rozszerzalności — Managed Extensibility Framework
Deweloper(zy) | Microsoft |
---|---|
Wersja stabilna | V1 w .NET Framework 4.0 / 12 kwietnia 2010
|
Wersja zapoznawcza | Wersja 2 zapowiedź 5 / 19 grudnia 2011
|
Magazyn | github |
Napisane w | Języki .NET |
System operacyjny | Okna |
Platforma | .NET Framework |
Rodzaj | Struktura aplikacji internetowych |
Licencja | Licencja MIT |
Strona internetowa | dokumenty |
Managed Extensibility Framework ( MEF ) to składnik .NET Framework 4.0, którego celem jest tworzenie lekkich, rozszerzalnych aplikacji. Ma na celu umożliwienie programistom aplikacji .NET wykrywanie i używanie rozszerzeń bez konieczności konfiguracji. Ma również na celu umożliwienie programistom rozszerzeń łatwej enkapsulacji kodu i unikania delikatnych twardych zależności. Ponadto ma na celu umożliwienie ponownego wykorzystania rozszerzeń w różnych aplikacjach. MEF został wprowadzony jako część .NET 4.0 i Silverlight 4 .
Przegląd
MEF ma na celu rozwiązanie problemu rozszerzalności środowiska uruchomieniowego. Bez MEF każda aplikacja, która chce obsługiwać model wtyczek, musi stworzyć własną infrastrukturę od podstaw. Wtyczki te często są specyficzne dla aplikacji i nie można ich ponownie używać w wielu implementacjach.
- MEF ma na celu zapewnienie standardowego sposobu, w jaki aplikacja hosta może ujawnić się i korzystać z rozszerzeń zewnętrznych. Rozszerzenia ze swej natury mogą być ponownie wykorzystywane w różnych zastosowaniach. Jednak rozszerzenie można nadal zaimplementować w sposób specyficzny dla aplikacji. Same rozszerzenia mogą od siebie zależeć, a MEF ma na celu upewnienie się, że są one połączone we właściwej kolejności, oszczędzając programistom robienia tego ręcznie.
- MEF oferuje zestaw podejść do odnajdywania aplikacji w celu zlokalizowania i załadowania dostępnych rozszerzeń.
- MEF umożliwia tagowanie rozszerzeń za pomocą dodatkowych metadanych, co ma na celu ułatwienie rozbudowanych zapytań i filtrowania.
Projekt
Z grubsza rzecz biorąc, rdzeń MEF składa się z katalogu i CompositionContainer. Katalog odpowiada za wykrywanie rozszerzeń, a kontener koordynuje tworzenie i spełnia zależności.
- Obywatel pierwszej klasy MEF to klasa ComposablePart. Komponentowa część oferuje jeden lub więcej eksportów, a także może zależeć od jednej lub więcej zewnętrznie świadczonych usług lub importu. Część komposowalna zarządza również instancją, która może być instancją obiektu danego typu (jest to w domyślnej implementacji MEF). MEF jest jednak rozszerzalny i można dostarczyć dodatkowe implementacje ComposablePart, o ile są one zgodne z umowami importu/eksportu.
- Każdy eksport i import ma kontrakt. Kontrakty są pomostem między eksportem a importem. Kontrakt eksportowy może składać się z dalszych metadanych, których można użyć do filtrowania jego wykrywania. Na przykład może wskazywać konkretną możliwość oferowaną przez eksport.
- Kontener MEF współdziała z katalogami, aby mieć dostęp do części składowych. Sam kontener rozwiązuje zależności części i udostępnia eksporty światu zewnętrznemu. Wystąpienia części komponowanych można dodawać bezpośrednio do kontenera.
- ComposablePart zwrócony przez katalog prawdopodobnie będzie rozszerzeniem aplikacji. Może mieć importy (zależności) na składnikach oferowanych przez aplikację hosta i prawdopodobnie wyeksportuje inne.
- Domyślna implementacja części składowej MEF używa metadanych opartych na atrybutach do deklarowania eksportów i importów. Dzięki temu MEF może określić, które części, importy i eksporty są dostępne poprzez odnajdywanie.