MEF против Mono.AddIn

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

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

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

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


person Patrick Wolf    schedule 20.10.2009    source источник


Ответы (3)


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

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

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

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

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

person Mikayla Hutchinson    schedule 02.11.2009
comment
Каков статус Mono.Addins по состоянию на 2014 год? Последний коммит в кодеплексе был в 2012 году, значит он либо мертв, либо очень стабилен :) - person user3557327; 15.11.2014

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

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

person Peter Lillevold    schedule 20.10.2009

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

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

person Scott Whitlock    schedule 27.10.2009
comment
Вы также можете управлять Mono.Addins из атрибутов. XML-манифест необходим только в том случае, если вы хотите подключить данные/метаданные или использовать некоторые из более продвинутых функций. Можно даже комбинировать! - person Mikayla Hutchinson; 02.11.2009
comment
@mhutch: я знаю, но были некоторые функции, которые были доступны только в манифесте XML, и я предпочел модель MEF со всеми атрибутами. Но это мелочь, согласен. - person Scott Whitlock; 03.11.2009