To, co powiedział Danielg, jest dobre. Dodałbym:
Jeśli oglądasz filmy o System.Addins, wyraźnie mówią o bardzo dużych projektach. Opowiada o jednym zespole zarządzającym aplikacją hosta, innym zespole zarządzającym każdym dodatkiem, a trzecim zespole zarządzającym umową i potokiem . Na tej podstawie uważam, że System.Addins jest wyraźnie przeznaczony dla większych aplikacji. Myślę o aplikacjach, takich jak systemy ERP, takie jak SAP (może nie tak duże, ale masz pomysł). Jeśli obejrzałeś te filmy, możesz stwierdzić, że nakład pracy potrzebny do użycia System.Addins jest bardzo duży. Byłoby dobrze, gdybyś miał wiele firm programujących dodatki innych firm dla twojego systemu i nie możesz złamać żadnej z tych umów na dodatki pod groźbą kary śmierci.
Z drugiej strony, MEF wydaje się mieć więcej podobieństw do schematu dodatków SharpDevelop, architektury wtyczki Eclipse lub Mono.Addins. Jest dużo łatwiejszy do zrozumienia niż System.Addins i uważam, że jest dużo bardziej elastyczny. Przyczyną utraty jest to, że nie uzyskujesz izolacji AppDomain lub silnych kontraktów wersjonowania zaraz po wyjęciu z pudełka z MEF. Mocne strony MEF polegają na tym, że możesz uporządkować całą aplikację jako kompozycję części, dzięki czemu możesz wysłać produkt w różnych konfiguracjach dla różnych klientów, a jeśli klient kupi nową funkcję, po prostu upuść część dla tej funkcji do katalogu instalacyjnego a aplikacja widzi go i uruchamia. Ułatwia również testowanie. Możesz utworzyć instancję obiektu, który chcesz przetestować i podawać mu makiety obiektów dla wszystkich jego zależności,
Najważniejszą kwestią, o której chciałbym wspomnieć, jest to, że chociaż System.Addins jest już w frameworku, nie widzę zbyt wielu dowodów na to, że ludzie go używają, ale MEF siedzi tam na CodePlex, który podobno ma być włączony NET 4, a ludzie już zaczynają tworzyć za jego pomocą wiele aplikacji (w tym ja). Myślę, że to mówi coś o tych dwóch frameworkach.