2010-07-20 11 views
15

Po przeczytaniu niektóre rzeczy takie jak to: http://mikehadlow.blogspot.com/2008/09/managed-extensibility-framework-why.htmlKorzystanie MEF jako IoC

Rozumiem, że MEF ma pewne featcures że nie znajdę się w IoC, i że MEF ma pewne IoC rzeczy, które nie są probaboly tak zaawansowane jak mogą zaoferować inne systemy IoC.

Potrzebuję rzeczy MEF. Czy potrzebuję również struktury IoC, czy też powinienem czuć się dobrze z tym, co ma MEF?

Asher

+0

Proszę zaznaczyć odpowiedź z korzyścią dla społeczności i swój rating zatwierdzenia. – RyBolt

Odpowiedz

8

Zależy od wymagań/istniejącego kodu.

Jeśli masz istniejącą infrastrukturę kodu zbudowaną na kontenerze IoC, możesz w rzeczywistości połączyć je z MEF. Ostatnio budowałem framework ASP.NET MVC + MEF, a kilku moich czytelników pytało, jak zintegrować Unity z ramą MEF + MVC, którą zbudowałem. Okazało się to bardzo łatwe dzięki projektowi o nazwie Common Services Locator.

Projekt CSL jest zaprojektowany w celu zapewnienia abstrakcji nad punktu serwisowego, więc mogę chwycić dostawcy CSL Jedności, drut go ze zwyczajem ExportProvider i MEF automatycznie zaczyna komponować moje IoC-napędzane części.

Jest to jedna z korzyści modelu MEFs ExportProvider, można łatwo podłączyć dodatkowych dostawców, aby rozpocząć eksportowanie z różnych źródeł.

Ostatni tydzień I blogged about combining MEF+Unity (a także MEF + Autofac jako kolejny przykład) i chociaż moje przykłady są przygotowane dla ASP.NET MVC, koncepcja jest taka sama dla większości innych implementacji.

Jeśli masz możliwość budowania czegoś świeżego za pomocą MEF, prawdopodobnie okaże się, że nie potrzebujesz pojemnika IoC, MEF może obsługiwać wstrzyknięcie właściwości, wstrzyknięcie konstruktora, zarządzanie czasem części i rozdzielczość typu.

Daj mi znać, jeśli masz jakieś pytania :)

3

IoC następuje celowi.

MEF specjalnie jest dobrze zaprojektowane, jeśli chcesz mieć jakieś wtyczki w systemie. lub kod, któremu nie ufasz, aby działał poprawnie (nie zapomnij obsługiwać wyjątków).

, ale przychodzi zatem z narzutem.

jeśli chcesz tylko IoC, ponieważ jest to dobry wzór dla oprogramowania rozszerzalnego i testowalnego, to polecam AutoFac, ponieważ pochodzi od tego samego gościa. mniej więcej :-)

i, jeśli potrzebujesz obu intencji. następnie użyj obu. jak zauważył Matthew, możesz użyć CSL, aby je streścić. jeśli chciał.

dla wtyczek -> MEF

dla IoC -> an proste IoC

3

Używamy MEF jako kontener IoC i pracuje dla nas.

Mając na uwadze powyższe, należy spojrzeć na tym blogu Glenn bloku gdzie wymienia braki mogą wystąpić: Should I use MEF for my general IoC needs?

+0

MEF2 (w .NET 4.5 Framework) rozwiązuje problemy opisane w tym artykule. –

1

Użyłem modelu dostawcy dla zasadniczo "IOC" w aplikacji internetowej przed przejściem do AutoFac ostatnio.

Zasadniczo moim wymaganiem jest to, że muszę mieć dostęp do aplikacji "na sprzedaż", więc wszelkie interfejsy muszą zostać wyodrębnione. Korzystając z modelu dostawcy rzeczy stają się niechlujne. Używanie kontenera IOC (jeśli już jest) ma więcej sensu i wciąż mogę spełnić moje wymagania dotyczące "sprzedaży", ponieważ kontener IOC można "przekonfigurować", aby umożliwić różne implementacje.

Myślę, że MEF byłoby najlepszym rozwiązaniem, jeśli chcesz mieć czystą podstawę kodu, ponieważ ma więcej konwencji, więc zasadniczo ludzie mogą upuszczać komponenty do folderu i nie zmieniać żadnej konfiguracji, aby wprowadzić zmiany. Jest to miłe, ale prawdopodobnie przesadzone dla mojego scenariusza, gdzie wystarczy zwykłe zastąpienie konfiguracji.

Czytaj więcej na moim blogu - miejmy nadzieję, że blog będzie trochę dobrych komentarzy o tym zbyt: http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html