Wprowadzenie do MEF w .NET 4.0<br />Autor: Maciej Zbrzezny<br />Łódzka Grupa Profesjonalistów IT & .NET<br />
O mnie<br />Nazywam się Maciej Zbrzezny<br />Pracuje w firmie CAS, w której jest architektem oprogramowania i programistą,...
MEF<br />Managed<br />Extensibility<br />Framework<br />Makes<br />Extensibility<br />Fun<br />
Rozszerzalność Przede wszystkim!<br />Po co to wszystko?<br />
Rozszerzalność – pożądana<br />Deweloperzy, architekci oprogramowania od zawsze myślą o tym:<br />By ich aplikacje były ro...
Brak standardu<br />Firefox (dlaczego stał się taki popularny? Dlaczego Opera traciła?)<br />Office ma swój model – ale ty...
Rozszerzalność może być pułapką<br />Trudno osiągnąć, a często jeszcze trudniej używać<br />
Rozszerzalność powinna być prosta<br />
IoC / DI<br />Na co jeszcze pozwala MEF?<br />
IoC / DI – o co chodzi?<br />Masz problem – odwróć zależności.<br />Coraz popularniejsze staje się wykorzystanie wzorców b...
IoC/ DI<br />MEF skupia się na rozszerzalności aplikacji ale może być też wykorzystany do czegoś innego.<br />MEF używa DI...
Przykład MEF dla DI/IOC<br />Zdekomponowana aplikacja<br />MEF<br />DI/IOC<br />MEF<br />DI/IOC<br />Warstwa<br />Dostępu ...
MEF a kontener IoC - różnice<br />MEF<br />Odkrywanie (Discovery)<br />Otwarte zestawy<br />Wiązania części z zestawu<br /...
Wprowadzenie<br />MEF<br />
Dlaczego i jak powstał?<br />Microsoft o dawna myślał: „Jak tworzyć aplikacje z wielo-używalnych (resuable) komponentów, k...
Dlaczego potrzebujemy czegoś nowego?<br />MEF nie jest pierwszym rozwiązaniem, który wspiera wspomniane wcześniej funkcjon...
MEF narodzenie<br />Na CodePlexpowstaje projekt MEF (sierpień 2008): http://mef.codeplex.com/<br />MEF staje się częścią ....
Typowy scenariusz<br />Aplikacja<br />Potrzebuję<br />paska narzędziowego<br />Potrzebuję<br />Menu<br />Ja mam<br />paska...
Interfejsy, czyli wstęp do plugin’ów<br />Interfejs:<br />Implementacja interfejsu (plugin):<br />http://maciej-progtech.b...
Przed erą MEF …<br />Gotowy program:<br />http://maciej-progtech.blogspot.com/2010/05/jak-zaimplementowac-mechanizm-wtycze...
W erze MEF: Programowanie atrybutami (Attributed Programming Model)<br />
DEMO<br />MEF w praktyce …<br />
1, 2, 3, 4 … MEF start<br />Podstawy, czyli<br />
Po pierwsze: Część (Composable Part)<br />Jest to podstawowy element (fragment, część)<br />Jest to fragment aplikacji, kt...
Po drugie: Kontrakt łączy części (1)<br />Part<br />B<br />Part<br />A<br />Contract<br />Poszczególne części nie zależą o...
Part<br />B<br />Part<br />A<br />Po drugie: Kontrakt łączy części (1)<br />Contract<br />Kontrakt zwykle oznaczany strzał...
Po drugie: Kontrakt łączy części (2)<br />Part<br />A<br />Part<br />B<br />Import<br />Export<br />Import jest kontraktem...
Po drugie: Kontrakt łączy części (2)<br />Part<br />A<br />Part<br />B<br />Import<br />Export<br />Import jest kontraktem...
Po drugie: Kontrakt łączy części (3)<br />Import<br />Part<br />Export<br />Import<br />Export<br />Import<br />
Po trzecie: Kontener (Container) (1)<br />Container<br />Dokonuje on kompozycji (wiąże / składa poszczególne części)<br />...
Po trzecie: Kontener (Container) (2)<br />Container<br />
Po czwarte: Katalog<br />Katalog jest miejscem skąd pobierane są części do kontenera<br />Dostępne katalogi:<br />Assembly...
Opóźniona inicjalizacja (Lazyloading?)<br />Part<br />B<br />Part<br /><A><br />Wczytywanie wszystkiego na raz może być cz...
Metadane<br />Element związany z lazyloading<br />Umożliwia dodawanie do części pewnych znaczników, czy atrybutów<br />War...
Czas życia części<br />Singleton<br />Factory<br />Container<br />Container<br />Part A<br />Part A<br />Part A<br />Part ...
DEMO<br />MEF w praktyce …<br />
MEF podsumowanie (1)<br />MEF jest rozwiązaniem dla problemu rozszerzania:<br />Nie trzeba tworzyć własnej infrastruktury....
MEF podsumowanie (2)<br />MEF zapewnia standardową rozszerzalność<br />MEF oferuje mechanizmy odkrywania i lokalizowania e...
MEF podsumowanie (3)<br />Zaleta poza-funkcjonalna:<br />MEF jest częścią .NET 4.0 !!!<br />
Gdzie szukać informacji<br />MEF na Codeplex (dokumentacja, przykłady, kod źródłowy, linki do blogów twórców): http://mef....
Dziękuję za uwagę<br />
Upcoming SlideShare
Loading in …5
×

Wprowadzenie do MEF w .NET 4.0

4,068 views
4,102 views

Published on

Wyobraźmy sobie, że budowanie aplikacji tak proste, jak budowanie domku z klocków, gdzie poszczególne elementy (klocki) są połączone w całość (domek) podczas zabawy (życia domku). Przecież coraz częściej zachodzi potrzeba budowy aplikacji tak, aby składała się ona z luźno związanych komponentów, które ulegają kompozycji dopiero podczas działania aplikacji. Właśnie na takie podejście pozwala MEF, czyli „Managed Extensibility Framework", nowa biblioteka wchodząca w skład .NET Framework 4.0.
Chciałbym wszystkich zainteresowanych zaprosić na moją prezentację "Wprowadzenie do Managed Extensibility Framework w .NET 4.0", którą pokażę na najbliższym spotkaniu Łódzkiej Grupy Profesjonalistów IT & .NET.
Niniejsza sesja ma za zadanie wprowadzić słuchacza w zagadnienia związane z „Managed Extensibility Framework", wskazać potencjalne zastosowania oraz pokazać przykładową aplikację.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
4,068
On SlideShare
0
From Embeds
0
Number of Embeds
2,249
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Wprowadzenie do MEF w .NET 4.0

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

×