То, что сказал Даниэль, хорошо. Я бы добавил:
Если вы смотрите видео о System.Addins, они явно говорят об очень больших проектах. Он рассказывает об одной команде, управляющей приложением-хостом, другой команде, управляющей каждой надстройкой, и третьей группе, управляющей контрактом и конвейером. Исходя из этого, я думаю, что System.Addins явно для больших приложений. Я имею в виду такие приложения, как ERP-системы, такие как SAP (возможно, не такие большие, но вы поняли). Если вы смотрели эти видео, вы можете сказать, что объем работы с System.Addins очень велик. Было бы хорошо, если бы у вас было много компаний, программирующих сторонние надстройки для вашей системы, и вы не можете разорвать любой из этих контрактов надстроек под страхом смерти.
С другой стороны, MEF, похоже, имеет больше сходства со схемой надстроек SharpDevelop, архитектурой плагинов Eclipse или Mono.Addins. Это гораздо проще понять, чем System.Addins, и я считаю, что это гораздо более гибко. То, что вы теряете, это то, что вы не получаете изоляцию AppDomain или контракты на строгое управление версиями из коробки с MEF. Сильные стороны MEF заключаются в том, что вы можете структурировать все приложение в виде набора деталей, чтобы вы могли поставлять свой продукт в разных конфигурациях для разных клиентов, и если покупатель приобретает новую функцию, вы просто помещаете деталь для этой функции в каталог установки. и приложение видит его и запускает. Это также облегчает тестирование. Вы можете создать экземпляр объекта, который хотите протестировать, и передать ему фиктивные объекты для всех его зависимостей,
Самый важный момент, который я хотел бы упомянуть, это то, что хотя System.Addins уже находится в фреймворке, я не вижу много свидетельств того, что люди его используют, но MEF просто сидит на CodePlex, предположительно для включения в .NET 4, и люди уже начинают создавать множество приложений с ним (включая меня). Я думаю, что это говорит вам кое-что о двух рамках.