sobota, 22 października 2011

MEF czy Unity w Prism

Jak wiadomo Microsoft posiada dwa kontenery umożliwiające wykorzystanie od "ręki" możliwości jakie daje Prism. Dla innych bibliotek jak np. Ninject należy odpowiednio zaimplementować własny Bootstrapper co oczywiście nie jest rzeczą trudną i jeżeli będę posiadał trochę wolnego czasu postaram się pokazać.

Tak więc pytanie dla nie lubiących zbytnio kodowania: co użyć MEF czy Unity? Oczywiście odpowiedź nie jest prosta i należy się zastanowić co dają oba kontenery a w czym są różnice. Przeglądając dokumentację Prism można znaleźć informacje o różnicach w nich występujących. Oprócz tych, które znajdują się w podręczniku podam kilka które znalazłem podczas testowania obu tych kontenerów.

Zacznijmy więc od rzeczy które umożliwiają wspólnie i MEF i Unity:
- rejestrują typy w kontenerze
- rejestrują konkretne instancje w kontenerze
- umożliwiają stworzenie instancji stworzonych typów
- umożliwiają wstrzykiwanie instancji poprzez konstruktor
- umożliwiają wstrzykiwanie instancji do właściwości klas
- posiadają atrybuty do oznaczania typów i związków którymi zarządzają obie biblioteki
- obsługują zależności w grafach obiektów (graf obiektu można sobie wyobrazić jako strukturę zależności pomiędzy kolejnymi klasami: np. mamy klasę która w konstruktorze przyjmuje interfejs, a interfejs ten implementuje kolejna klasa posiadająca w swoim konstruktorze inny interfejs itd.)

Rzeczy które oferuje unity a nie MEF:
- potrafi stworzyć instancję niezarejestrowanego typu
- tworzy typy generyczne
- potrafi przechwycić odwołania do obiektu i dodać dodatkowe funkcjonalności do obiektu docelowego
- domyślnie tworzy za każdym razem nową instancję obiektu
- interfejsy muszą być rejestrowane

Co ma MEF a czego nie ma Unity:
- wyszukuje biblioteki w katalogu (automatycznie)
- pobiera pliki XAP i pobierania bibliotek
- reorganizuje właściwości i kolekcje w trakcie odnajdowania bilbiotek
- automatycznie eksportuje odnalezione typy
- standardowo dostarczany wraz z platformą .NET
- domyślnie tworzy obiekty według wzorca Singleton
- nie trzeba niczego rejestrować, wystarczy atrybut Export
- łatwe zarządzanie i tworzenie aplikacji w stylu pluginowym

Tak więc obie biblioteki mają swoje zalety. Można także tworzyć aplikacje wykorzystujące obie biblioteki na raz, np. Unity do operacji DI a MEF do implementowania pluginów.

Brak komentarzy:

Prześlij komentarz