SlideShare une entreprise Scribd logo
1  sur  41
Wprowadzenie do MEF w .NET 4.0 Autor: Maciej Zbrzezny Łódzka Grupa Profesjonalistów IT & .NET
O mnie Nazywam się Maciej Zbrzezny Pracuje w firmie CAS, w której jest architektem oprogramowania i programistą, współtworzę tam oprogramowanie do komunikacji w rozproszonych systemach automatyki przemysłowej i integracji z systemami biznesowymi (rodzina oprogramowania: CommServer).  Tworzę oprogramowanie wykorzystujące platformę .NET(głównie C#) i standard OPC.  Autor bloga „Programowanie i Technologie” (http://maciej-progtech.blogspot.com/).  Posiadam certyfikaty MCTS z obszaru ASP.NET i Windows Forms Applications.  maciejzbrzezny@gmail.com
MEF Managed Extensibility Framework Makes Extensibility Fun
Rozszerzalność Przede wszystkim! Po co to wszystko?
Rozszerzalność – pożądana Deweloperzy, architekci oprogramowania od zawsze myślą o tym: By ich aplikacje były rozszerzalne By można było dodawać nowe elementy bez potrzeby ich ponownej rekompilacji By aplikację można było rozszerzać łatwo i bez dużego nakładu pracy
Brak standardu Firefox (dlaczego stał się taki popularny? Dlaczego Opera traciła?) Office ma swój model – ale tylko dla Office’a ASP.NET ma swój dzięki provider’om  SharpDevelop - SODA …
Rozszerzalność może być pułapką Trudno osiągnąć, a często jeszcze trudniej używać
Rozszerzalność powinna być prosta
IoC / DI Na co jeszcze pozwala MEF?
IoC / DI – o co chodzi? Masz problem – odwróć zależności. Coraz popularniejsze staje się wykorzystanie wzorców bazujących na DependencyInjection (DI) i Inversion Of Control (IoC) Zasada odwracania zależności: Moduły wysokopoziomowe nie powinny zależeć od niskopoziomowych (obie grupy niech zależą od abstrakcji) Abstrakcje nie powinny zależeć od szczegółowych rozwiązań (a na odwrót)
IoC/ DI MEF skupia się na rozszerzalności aplikacji ale może być też wykorzystany do czegoś innego. MEF używa DI/IoCjako strategii pozwalającej na komponowanie różnych rozszerzeń, ale nie jest  typowym generycznym kontenerem DI /IoC.
Przykład MEF dla DI/IOC Zdekomponowana aplikacja MEF DI/IOC MEF DI/IOC Warstwa Dostępu do Danych Obiekty Biznesowe Interfejs użytkownika MEF Import Wnętrze aplikacji (wszystkie komponenty znane) Dostawca danych z SQL Server Dostawca danych z Oracle Server Na zewnątrz aplikacji (komponenty nie znane)
MEF a kontener IoC - różnice MEF Odkrywanie (Discovery) Otwarte zestawy Wiązania części z zestawu Brak zewnętrznej konfiguracji Kontener IoC Rejestracja Zamknięte zestawy Wiązania ścisłe Zwykle zewnętrzna konfiguracja
Wprowadzenie MEF
Dlaczego i jak powstał? Microsoft o dawna myślał: „Jak tworzyć aplikacje z wielo-używalnych (resuable) komponentów, które mogą być odkrywane, używane i składane dynamicznie”?: Visual Studio 2010 i nowy rozszerzalny edytor dla programisty. „Oslo” i edytor „Intellipad”, który korzysta z MEF, by zapewnić rozszerzalność w oparciu o skrypty (pluginy) napisane w IreonPython’nie „Acropolis” i framework wspierający budowanie aplikacji kompozytowych, podczas działania odkrywane były komponenty aplikacji  i związane z nimi serwisy, a do konfiguracji wykorzystywany XAML. Problem rozszerzalności nie dotyczył tylko Microsoftu. Konsumenci-programiści od lat sami implementowali własne mechanizmy rozszerzeń. Microsoft postanowił jednak zrobić krok i wyjść naprzód swoim i innych potrzebom.
Dlaczego potrzebujemy czegoś nowego? MEF nie jest pierwszym rozwiązaniem, który wspiera wspomniane wcześniej funkcjonalności. Było i jest wiele proponowanych rozwiązań: Java: EJB, CORBA, OSGIw Eclipse (czyli projekt Equinox), framework Spring. Microsoft: COM, System.Addinw .NET Framework open source: architektura SODA wSharpDevelopi kontenery IoCjak Castle Windsor, Structure Map czy Unity z Patterns& Practices. Żadne z powyższych nie jest idealne MEF jest wyciągnięciem wniosków z tych wszystkich.
MEF narodzenie Na CodePlexpowstaje projekt MEF (sierpień 2008): http://mef.codeplex.com/ MEF staje się częścią .NET 4.0, jako System.ComponentModel.Composition usingSystem.ComponentModel.Composition; usingSystem.ComponentModel.Composition.Hosting;
Typowy scenariusz Aplikacja Potrzebuję paska narzędziowego Potrzebuję Menu Ja mam paska narzędziowy Ja mam Menu Rozszerzenie B Rozszerzenie A
Interfejsy, czyli wstęp do plugin’ów Interfejs: Implementacja interfejsu (plugin): http://maciej-progtech.blogspot.com/2010/05/jak-zaimplementowac-mechanizm-wtyczek.html
Przed erą MEF … Gotowy program: http://maciej-progtech.blogspot.com/2010/05/jak-zaimplementowac-mechanizm-wtyczek.html
W erze MEF: Programowanie atrybutami (Attributed Programming Model)
DEMO MEF w praktyce …
1, 2, 3, 4 … MEF start Podstawy, czyli
Po pierwsze: Część (Composable Part) Jest to podstawowy element (fragment, część) Jest to fragment aplikacji, która jest pewnego rodzaju układanką Podczas działania aplikacji wszystkie jej części są „komponowane” w całość Part
Po drugie: Kontrakt łączy części (1) Part B Part A Contract Poszczególne części nie zależą od siebie nawzajem, zależą natomiast od kontraktu Kontrakt (ang. Contract) to pewnego rodzaju pomost pomiędzy różnymi częściami To deklaracja, że pewne dwie części mogą ze sobą współpracować Każda część (Part) powinna zawierać przynajmniej jedno powiązanie z kontraktem
Part B Part A Po drugie: Kontrakt łączy części (1) Contract Kontrakt zwykle oznaczany strzałką
Po drugie: Kontrakt łączy części (2) Part A Part B Import Export Import jest kontraktem, który określa, że część go potrzebuje Export jest kontraktem, który określa, że część go oferuje Każdy Part powinien zawierać przynajmniej jeden import lub export
Po drugie: Kontrakt łączy części (2) Part A Part B Import Export Import jest kontraktem, który określa, że część go potrzebuje Export jest kontraktem, który określa, że część go oferuje Każdy Part powinien zawierać przynajmniej jeden import lub export
Po drugie: Kontrakt łączy części (3) Import Part Export Import Export Import
Po trzecie: Kontener (Container) (1) Container Dokonuje on kompozycji (wiąże / składa poszczególne części) Kontener wykorzystuje informacje o kontraktach by dokonać kompozycji Kompozycji dokonuje tak, jak to jest wymagane i możliwe  Jeżeli czegoś brakuje, to przyjmuje, że nie jest potrzebne i pomija (chyba że oznaczymy, że to jest wymagane i wtedy otrzymamy wyjątek) Composition Import Export Part Import Export Import
Po trzecie: Kontener (Container) (2) Container
Po czwarte: Katalog Katalog jest miejscem skąd pobierane są części do kontenera Dostępne katalogi: AssemblyCatalog DirectoryCatalog AgragateCatalog TypeCatalog DeploymentCatalog (Silverlightonly) FilteringCatalog
Opóźniona inicjalizacja (Lazyloading?) Part B Part <A> Wczytywanie wszystkiego na raz może być czasochłonne i zasobochłonne –przykład menu z wielu assembly MEF oferuje opóźnioną inicjalizację Zamiast konkretnego importu oferuje pewien wrapper (wrapper of the contract) który go opakowuje. Part B Part <A> Part A Lazy<T, TMetadata>
Metadane Element związany z lazyloading Umożliwia dodawanie do części pewnych znaczników, czy atrybutów Wartości Metadanych pojawiają się wcześniej (zanim wczytane będą prawdziwe party Metadane mogą być słabo i silnie typowane
Czas życia części Singleton Factory Container Container Part A Part A Part A Part A [PartCreationPolicy( CeationPolicy.NonShared)] [PartCreationPolicy( CeationPolicy.Shared)]
DEMO MEF w praktyce …
MEF podsumowanie (1) MEF jest rozwiązaniem dla problemu rozszerzania: Nie trzeba tworzyć własnej infrastruktury. Plugin’y mogą być wielo-używalne.  MEF dostarcza mechanizmy wspomagające IoC/DI – ale nie jest generycznym kontenerem IoC Assembly aplikacji głównej Assembly opisu kontraktów Assembly plugin’ów Part 1 Part 3 Part 2 [Import] [Export]
MEF podsumowanie (2) MEF zapewnia standardową rozszerzalność MEF oferuje mechanizmy odkrywania i lokalizowania elementów oraz ładowania rozszerzeń. MEF pozwala na oznaczanie rozszerzeń pewnymi metadanymi, które później można odczytywać, odpytywać, czy filtrować.
MEF podsumowanie (3) Zaleta poza-funkcjonalna: MEF jest częścią .NET 4.0 !!!
Gdzie szukać informacji MEF na Codeplex (dokumentacja, przykłady, kod źródłowy, linki do blogów twórców): http://mef.codeplex.com MSDN: Wprowadzenie do Mef: http://msdn.microsoft.com/en-us/library/dd460648.aspx MSDN, namespaceSystem.ComponentModel.Composition: http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.aspx MSDN Magazine: http://msdn.microsoft.com/en-us/magazine/ee291628.aspx http://msdn.microsoft.com/en-us/magazine/gg650670.aspx Kontakt do mnie: maciejzbrzezny@gmail.com, http://maciej-progtech.blogspot.com
Dziękuję za uwagę

Contenu connexe

En vedette

Photo Album Sharon
Photo Album SharonPhoto Album Sharon
Photo Album Sharonguest47c090c
 
K:\blog\shanatova
K:\blog\shanatovaK:\blog\shanatova
K:\blog\shanatovairis
 
Construction
ConstructionConstruction
Constructioniris
 
боднарук долго работать анонс
боднарук долго работать анонсбоднарук долго работать анонс
боднарук долго работать анонсKaterina Krivtsova
 
N E W S P A P E R C O L U M N S
N E W S P A P E R  C O L U M N S  N E W S P A P E R  C O L U M N S
N E W S P A P E R C O L U M N S jehteach1
 
Tema 8º me gusta tu amistad.
Tema 8º me gusta tu amistad.Tema 8º me gusta tu amistad.
Tema 8º me gusta tu amistad.pitimini
 
Presentation of Triton
Presentation of TritonPresentation of Triton
Presentation of Tritonsonia
 
Zelfs Goed Kan Beter
Zelfs Goed Kan BeterZelfs Goed Kan Beter
Zelfs Goed Kan BeterTonCusters
 
PośRednicy Finansowi
PośRednicy FinansowiPośRednicy Finansowi
PośRednicy Finansowiguest39cf1c6
 
Sabrina pesarini fourtourism social media marketing destinazioni bit 2011
Sabrina pesarini fourtourism social media marketing destinazioni bit 2011Sabrina pesarini fourtourism social media marketing destinazioni bit 2011
Sabrina pesarini fourtourism social media marketing destinazioni bit 2011FTourism & Marketing
 
REVUE DE PRESSE DU 6 AVRIL 2010 (5)
REVUE DE PRESSE DU 6 AVRIL 2010 (5)REVUE DE PRESSE DU 6 AVRIL 2010 (5)
REVUE DE PRESSE DU 6 AVRIL 2010 (5)Capa presse tv
 

En vedette (20)

Photo Album Sharon
Photo Album SharonPhoto Album Sharon
Photo Album Sharon
 
K:\blog\shanatova
K:\blog\shanatovaK:\blog\shanatova
K:\blog\shanatova
 
Construction
ConstructionConstruction
Construction
 
боднарук долго работать анонс
боднарук долго работать анонсбоднарук долго работать анонс
боднарук долго работать анонс
 
Genitive_exercises
Genitive_exercisesGenitive_exercises
Genitive_exercises
 
AlAdInn Ventures 2012
AlAdInn Ventures 2012AlAdInn Ventures 2012
AlAdInn Ventures 2012
 
N E W S P A P E R C O L U M N S
N E W S P A P E R  C O L U M N S  N E W S P A P E R  C O L U M N S
N E W S P A P E R C O L U M N S
 
Tema 8º me gusta tu amistad.
Tema 8º me gusta tu amistad.Tema 8º me gusta tu amistad.
Tema 8º me gusta tu amistad.
 
Suffixes
SuffixesSuffixes
Suffixes
 
Can Pres Eng2
Can Pres Eng2Can Pres Eng2
Can Pres Eng2
 
Coca cola india
Coca cola indiaCoca cola india
Coca cola india
 
objetivos
objetivosobjetivos
objetivos
 
Voc 40
Voc 40Voc 40
Voc 40
 
Futureeje
FutureejeFutureeje
Futureeje
 
Presentation of Triton
Presentation of TritonPresentation of Triton
Presentation of Triton
 
It6
It6It6
It6
 
Zelfs Goed Kan Beter
Zelfs Goed Kan BeterZelfs Goed Kan Beter
Zelfs Goed Kan Beter
 
PośRednicy Finansowi
PośRednicy FinansowiPośRednicy Finansowi
PośRednicy Finansowi
 
Sabrina pesarini fourtourism social media marketing destinazioni bit 2011
Sabrina pesarini fourtourism social media marketing destinazioni bit 2011Sabrina pesarini fourtourism social media marketing destinazioni bit 2011
Sabrina pesarini fourtourism social media marketing destinazioni bit 2011
 
REVUE DE PRESSE DU 6 AVRIL 2010 (5)
REVUE DE PRESSE DU 6 AVRIL 2010 (5)REVUE DE PRESSE DU 6 AVRIL 2010 (5)
REVUE DE PRESSE DU 6 AVRIL 2010 (5)
 

Similaire à Wprowadzenie do MEF w .NET 4.0

Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieArtur Radosz
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieGrzegorz Godlewski
 
PHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubiPHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubiPHPCon Poland
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVCQuick-Solution
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowychTomasz Borowski
 
Integracja systemow od strony praktycznej
Integracja systemow od strony praktycznejIntegracja systemow od strony praktycznej
Integracja systemow od strony praktycznejMarek Horbań
 
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1Mariusz Szatkowski
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiGrzegorz Bartman
 
Techniczna organizacja zespołu
Techniczna organizacja zespołuTechniczna organizacja zespołu
Techniczna organizacja zespołuintive
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyWydawnictwo Helion
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Semihalf
 
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposePrzenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposeMariusz Bąk
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 officialskowronkow
 

Similaire à Wprowadzenie do MEF w .NET 4.0 (20)

Ciągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - WprowadzenieCiągłe Dostarcznie - Wprowadzenie
Ciągłe Dostarcznie - Wprowadzenie
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
CI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecieCI oraz CD w złożonym projekcie o małym budżecie
CI oraz CD w złożonym projekcie o małym budżecie
 
PHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubiPHP i Microsoft - kto się lubi, ten się czubi
PHP i Microsoft - kto się lubi, ten się czubi
 
PHP i microsoft
PHP i microsoftPHP i microsoft
PHP i microsoft
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVCWzorce Repository, Unity of Work, Devexpress MVC  w architekturze Asp.net MVC
Wzorce Repository, Unity of Work, Devexpress MVC w architekturze Asp.net MVC
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Integracja systemow od strony praktycznej
Integracja systemow od strony praktycznejIntegracja systemow od strony praktycznej
Integracja systemow od strony praktycznej
 
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
WordPress 2015 - Wróżby, kabały, przepowiednie - WordUp Trójmiasto #1
 
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław SobieckiPodstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
Podstawy programowania w Drupalu - Drupal idzie na studia - Jarosław Sobiecki
 
Ext js
Ext jsExt js
Ext js
 
JavaEE + OSGi
JavaEE + OSGiJavaEE + OSGi
JavaEE + OSGi
 
Techniczna organizacja zespołu
Techniczna organizacja zespołuTechniczna organizacja zespołu
Techniczna organizacja zespołu
 
Delphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programistyDelphi 8 .NET. Kompendium programisty
Delphi 8 .NET. Kompendium programisty
 
Service Contract
Service ContractService Contract
Service Contract
 
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
Skazani na firmware. Serwer na ARM64? Tak, to możliwe! S07E03
 
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker ComposePrzenieś się do kontenera, czyli korzyści z Docker i Docker Compose
Przenieś się do kontenera, czyli korzyści z Docker i Docker Compose
 
My littlemvc 2008 official
My littlemvc 2008 officialMy littlemvc 2008 official
My littlemvc 2008 official
 
Grok Artykul
Grok ArtykulGrok Artykul
Grok Artykul
 

Wprowadzenie do MEF w .NET 4.0

  • 1. Wprowadzenie do MEF w .NET 4.0 Autor: Maciej Zbrzezny Łódzka Grupa Profesjonalistów IT & .NET
  • 2. O mnie Nazywam się Maciej Zbrzezny Pracuje w firmie CAS, w której jest architektem oprogramowania i programistą, współtworzę tam oprogramowanie do komunikacji w rozproszonych systemach automatyki przemysłowej i integracji z systemami biznesowymi (rodzina oprogramowania: CommServer). Tworzę oprogramowanie wykorzystujące platformę .NET(głównie C#) i standard OPC. Autor bloga „Programowanie i Technologie” (http://maciej-progtech.blogspot.com/). Posiadam certyfikaty MCTS z obszaru ASP.NET i Windows Forms Applications. maciejzbrzezny@gmail.com
  • 3. MEF Managed Extensibility Framework Makes Extensibility Fun
  • 5. Rozszerzalność – pożądana Deweloperzy, architekci oprogramowania od zawsze myślą o tym: By ich aplikacje były rozszerzalne By można było dodawać nowe elementy bez potrzeby ich ponownej rekompilacji By aplikację można było rozszerzać łatwo i bez dużego nakładu pracy
  • 6. Brak standardu Firefox (dlaczego stał się taki popularny? Dlaczego Opera traciła?) Office ma swój model – ale tylko dla Office’a ASP.NET ma swój dzięki provider’om SharpDevelop - SODA …
  • 7. Rozszerzalność może być pułapką Trudno osiągnąć, a często jeszcze trudniej używać
  • 9. IoC / DI Na co jeszcze pozwala MEF?
  • 10. IoC / DI – o co chodzi? Masz problem – odwróć zależności. Coraz popularniejsze staje się wykorzystanie wzorców bazujących na DependencyInjection (DI) i Inversion Of Control (IoC) Zasada odwracania zależności: Moduły wysokopoziomowe nie powinny zależeć od niskopoziomowych (obie grupy niech zależą od abstrakcji) Abstrakcje nie powinny zależeć od szczegółowych rozwiązań (a na odwrót)
  • 11. IoC/ DI MEF skupia się na rozszerzalności aplikacji ale może być też wykorzystany do czegoś innego. MEF używa DI/IoCjako strategii pozwalającej na komponowanie różnych rozszerzeń, ale nie jest typowym generycznym kontenerem DI /IoC.
  • 12. Przykład MEF dla DI/IOC Zdekomponowana aplikacja MEF DI/IOC MEF DI/IOC Warstwa Dostępu do Danych Obiekty Biznesowe Interfejs użytkownika MEF Import Wnętrze aplikacji (wszystkie komponenty znane) Dostawca danych z SQL Server Dostawca danych z Oracle Server Na zewnątrz aplikacji (komponenty nie znane)
  • 13. MEF a kontener IoC - różnice MEF Odkrywanie (Discovery) Otwarte zestawy Wiązania części z zestawu Brak zewnętrznej konfiguracji Kontener IoC Rejestracja Zamknięte zestawy Wiązania ścisłe Zwykle zewnętrzna konfiguracja
  • 15. Dlaczego i jak powstał? Microsoft o dawna myślał: „Jak tworzyć aplikacje z wielo-używalnych (resuable) komponentów, które mogą być odkrywane, używane i składane dynamicznie”?: Visual Studio 2010 i nowy rozszerzalny edytor dla programisty. „Oslo” i edytor „Intellipad”, który korzysta z MEF, by zapewnić rozszerzalność w oparciu o skrypty (pluginy) napisane w IreonPython’nie „Acropolis” i framework wspierający budowanie aplikacji kompozytowych, podczas działania odkrywane były komponenty aplikacji i związane z nimi serwisy, a do konfiguracji wykorzystywany XAML. Problem rozszerzalności nie dotyczył tylko Microsoftu. Konsumenci-programiści od lat sami implementowali własne mechanizmy rozszerzeń. Microsoft postanowił jednak zrobić krok i wyjść naprzód swoim i innych potrzebom.
  • 16. Dlaczego potrzebujemy czegoś nowego? MEF nie jest pierwszym rozwiązaniem, który wspiera wspomniane wcześniej funkcjonalności. Było i jest wiele proponowanych rozwiązań: Java: EJB, CORBA, OSGIw Eclipse (czyli projekt Equinox), framework Spring. Microsoft: COM, System.Addinw .NET Framework open source: architektura SODA wSharpDevelopi kontenery IoCjak Castle Windsor, Structure Map czy Unity z Patterns& Practices. Żadne z powyższych nie jest idealne MEF jest wyciągnięciem wniosków z tych wszystkich.
  • 17. MEF narodzenie Na CodePlexpowstaje projekt MEF (sierpień 2008): http://mef.codeplex.com/ MEF staje się częścią .NET 4.0, jako System.ComponentModel.Composition usingSystem.ComponentModel.Composition; usingSystem.ComponentModel.Composition.Hosting;
  • 18. Typowy scenariusz Aplikacja Potrzebuję paska narzędziowego Potrzebuję Menu Ja mam paska narzędziowy Ja mam Menu Rozszerzenie B Rozszerzenie A
  • 19. Interfejsy, czyli wstęp do plugin’ów Interfejs: Implementacja interfejsu (plugin): http://maciej-progtech.blogspot.com/2010/05/jak-zaimplementowac-mechanizm-wtyczek.html
  • 20. Przed erą MEF … Gotowy program: http://maciej-progtech.blogspot.com/2010/05/jak-zaimplementowac-mechanizm-wtyczek.html
  • 21. W erze MEF: Programowanie atrybutami (Attributed Programming Model)
  • 22. DEMO MEF w praktyce …
  • 23. 1, 2, 3, 4 … MEF start Podstawy, czyli
  • 24. Po pierwsze: Część (Composable Part) Jest to podstawowy element (fragment, część) Jest to fragment aplikacji, która jest pewnego rodzaju układanką Podczas działania aplikacji wszystkie jej części są „komponowane” w całość Part
  • 25. Po drugie: Kontrakt łączy części (1) Part B Part A Contract Poszczególne części nie zależą od siebie nawzajem, zależą natomiast od kontraktu Kontrakt (ang. Contract) to pewnego rodzaju pomost pomiędzy różnymi częściami To deklaracja, że pewne dwie części mogą ze sobą współpracować Każda część (Part) powinna zawierać przynajmniej jedno powiązanie z kontraktem
  • 26. Part B Part A Po drugie: Kontrakt łączy części (1) Contract Kontrakt zwykle oznaczany strzałką
  • 27. Po drugie: Kontrakt łączy części (2) Part A Part B Import Export Import jest kontraktem, który określa, że część go potrzebuje Export jest kontraktem, który określa, że część go oferuje Każdy Part powinien zawierać przynajmniej jeden import lub export
  • 28. Po drugie: Kontrakt łączy części (2) Part A Part B Import Export Import jest kontraktem, który określa, że część go potrzebuje Export jest kontraktem, który określa, że część go oferuje Każdy Part powinien zawierać przynajmniej jeden import lub export
  • 29. Po drugie: Kontrakt łączy części (3) Import Part Export Import Export Import
  • 30. Po trzecie: Kontener (Container) (1) Container Dokonuje on kompozycji (wiąże / składa poszczególne części) Kontener wykorzystuje informacje o kontraktach by dokonać kompozycji Kompozycji dokonuje tak, jak to jest wymagane i możliwe Jeżeli czegoś brakuje, to przyjmuje, że nie jest potrzebne i pomija (chyba że oznaczymy, że to jest wymagane i wtedy otrzymamy wyjątek) Composition Import Export Part Import Export Import
  • 31. Po trzecie: Kontener (Container) (2) Container
  • 32. Po czwarte: Katalog Katalog jest miejscem skąd pobierane są części do kontenera Dostępne katalogi: AssemblyCatalog DirectoryCatalog AgragateCatalog TypeCatalog DeploymentCatalog (Silverlightonly) FilteringCatalog
  • 33. Opóźniona inicjalizacja (Lazyloading?) Part B Part <A> Wczytywanie wszystkiego na raz może być czasochłonne i zasobochłonne –przykład menu z wielu assembly MEF oferuje opóźnioną inicjalizację Zamiast konkretnego importu oferuje pewien wrapper (wrapper of the contract) który go opakowuje. Part B Part <A> Part A Lazy<T, TMetadata>
  • 34. Metadane Element związany z lazyloading Umożliwia dodawanie do części pewnych znaczników, czy atrybutów Wartości Metadanych pojawiają się wcześniej (zanim wczytane będą prawdziwe party Metadane mogą być słabo i silnie typowane
  • 35. Czas życia części Singleton Factory Container Container Part A Part A Part A Part A [PartCreationPolicy( CeationPolicy.NonShared)] [PartCreationPolicy( CeationPolicy.Shared)]
  • 36. DEMO MEF w praktyce …
  • 37. MEF podsumowanie (1) MEF jest rozwiązaniem dla problemu rozszerzania: Nie trzeba tworzyć własnej infrastruktury. Plugin’y mogą być wielo-używalne. MEF dostarcza mechanizmy wspomagające IoC/DI – ale nie jest generycznym kontenerem IoC Assembly aplikacji głównej Assembly opisu kontraktów Assembly plugin’ów Part 1 Part 3 Part 2 [Import] [Export]
  • 38. MEF podsumowanie (2) MEF zapewnia standardową rozszerzalność MEF oferuje mechanizmy odkrywania i lokalizowania elementów oraz ładowania rozszerzeń. MEF pozwala na oznaczanie rozszerzeń pewnymi metadanymi, które później można odczytywać, odpytywać, czy filtrować.
  • 39. MEF podsumowanie (3) Zaleta poza-funkcjonalna: MEF jest częścią .NET 4.0 !!!
  • 40. Gdzie szukać informacji MEF na Codeplex (dokumentacja, przykłady, kod źródłowy, linki do blogów twórców): http://mef.codeplex.com MSDN: Wprowadzenie do Mef: http://msdn.microsoft.com/en-us/library/dd460648.aspx MSDN, namespaceSystem.ComponentModel.Composition: http://msdn.microsoft.com/en-us/library/system.componentmodel.composition.aspx MSDN Magazine: http://msdn.microsoft.com/en-us/magazine/ee291628.aspx http://msdn.microsoft.com/en-us/magazine/gg650670.aspx Kontakt do mnie: maciejzbrzezny@gmail.com, http://maciej-progtech.blogspot.com