MEF vs Mono.AddIn

Я разрабатываю настольное приложение .NET 3.5 С#. Он должен расширяться через плагины.

Существуют ли какие-либо статьи и т.д., обсуждая различия между MEF и Mono.AddIn, чтобы помочь мне принять обоснованное решение?

Или еще лучше у вас есть опыт работы с обеими этими фреймворками и можете прокомментировать их?

Спасибо, Патрик

Ответы

Ответ 1

[ПРИМЕЧАНИЕ. Я работаю над MonoDevelop, который использует Mono.Addins, но я обсуждал различия между MEF и Mono.Addins широко с Glenn Block от команды MEF на прошлой неделе]

MEF основан на составлении кода, хотя базовые абстракции очень гибкие. Напротив, Mono.Addins основан на дереве метаданных, где вы можете подключить данные/метаданные/код к богатой схеме вашего определения, поэтому расширения могут добавлять данные/метаданные, а также код.

Mono.Addins предоставляет вам систему управления добавлением/упаковкой/репозиторией/обновлением из коробки. Для MEF в этот момент вам придется создавать свои собственные.

MEF имеет несколько более низкий барьер для входа, и намного больше работ по дизайну перешло в его удобство использования и лежащие в основе абстракции. Кроме того, он является частью .NET 4, поэтому у него будет гораздо больше сообщество пользователей, разрабатывающих с ним/для него.

В этот момент, если вам нужно подключить данные/метаданные, а также код, и вы хотите иметь готовую систему упаковки, я бы рекомендовал Mono.Addins, иначе я бы рекомендовал MEF. Идя вперед, вероятно, что функции Mono.Addins будут реализованы на MEF, поэтому, вероятно, будет путь миграции к MEF.

Ответ 2

Я верю, что Hanselminutes Show # 181 содержит некоторое обсуждение Mono.AddIns и того, что он приносит в таблицу.

Во время очистки веб-страниц я также нашел это обсуждение, в котором подчеркивается разница в том, как эти две структуры в настоящее время обрабатывают кеширование каталога.

Ответ 3

Я исследовал и то и другое, и решил пойти с MEF, главным образом потому, что он будет выпущен как часть .NET 4, поэтому автоматически будет больше поддержки, обсуждения и развития вокруг него. Кроме того, MEF, казалось, мог делать все, что мне нужно, используя атрибуты прямо в коде, а Mono.AddIns требовал некоторых файлов метаданных, если я правильно помню.

РЕДАКТИРОВАТЬ. Если вы хотите увидеть результат моих усилий по использованию MEF для создания расширяемой рамки приложения, я открыл его и дал ему имя: SoapBox Core.