MEF - действительно хороший способ для такой архитектуры приложений. Сказать «не так много приложений используют MEF» не совсем правильно, потому что (вероятно) самым крупным и наиболее известным приложением, использующим MEF, является сама Visual Studio (начиная с версии 12.0 - 2013).
Теперь, есть некоторые недоразумения по поводу MEF. Есть 3 (ну, три с половиной) версии (вкуса) MEF. Это часто смущает людей.
Позвольте мне попытаться объяснить:
- MEF 1.0 , также известный как .NET Framework MEF. Первоначально выпущен с .NET Framework 4.0; пространство имен
System.ComponentModel.Composition
.
- плюсы : часть .NET Framework; очень гибкий и динамичный
- минусы : (относительно) медленно; нет дальнейшего развития
- MEF 2.0 , также известный как NuGet MEF. Microsoft хотела гораздо более быструю версию для приложений Windows Phone и не нуждалась в этом полностью динамичном подходе. Сначала выпущен только для мобильных платформ, а затем доступен для других платформ. Его можно получить через NuGet или с помощью .NET Core FX. Пространство имен
System.Composition
.
- плюсы : быстро; теперь часть .NET Core FX
- минусы : относительно «статично»; плохая производительность при запуске
- MEF 1.0 + , иногда ошибочно именуемый MEF 2.0. Это было обновление MEF 1.0, выпущенное с .NET Framework 4.5. Плюсы и минусы см. MEF 1.0.
- VS-MEF , особая разновидность MEF, используемая в Visual Studio. Может быть получен через NuGet ; также см. GitHub . Пространство имен
Microsoft.VisualStudio.Composition
.
- плюсы : сочетает в себе хорошую производительность MEF 2.0 с почти такой же гибкостью, что и MEF 1.0; находится в стадии активной разработки
- cons : динамическая перекомпоновка отсутствует
Эти версии MEF, конечно, имеют некоторые различия , но любая из этих версий может использоваться для динамического приложения на основе плагинов. В зависимости от ваших потребностей, вы можете выбрать один из них. В настоящее время я бы порекомендовал либо MEF 2.0 (NuGet MEF), либо VS-MEF. У меня есть практический опыт работы с VS-MEF, и я полностью удовлетворен его набором функций и производительностью.
Однако MEF - не единственный способ. Всегда есть возможность создания домашней платформы для приложений на основе плагинов. На самом деле, многие компании идут по этому пути.
Другая возможность (если у вас есть архитектура на основе IoC) - это использовать некоторый доступный контейнер IoC (например, Unity) и вручную расширять его функциональные возможности при необходимости.