Призма v4: Unity или MEF?

Я скачал Призма v4 и запустил установщик. Я вошел в каталог и запустил два следующих пакетных файла:

  • только для рабочего стола-откройте модульность с помощью MEF QuickStart.летучая мышь!--6-->
  • Desktop only-открыть модульность с Unity QuickStart.летучая мышь!--6-->

когда я компилирую эти приложения, я не вижу никакой реальной разницы. Я искал MEF vs Unity, и я нашел некоторые плюсы / минусы, но ничего, что конкретно указывает, является ли он "лучше" (и я знаю, что это субъективно) с использованием Prism. Я думаю, возможно, если я перечислю свои требования, кто-то может указать мне правильные технологии для использования (даже если это не Prism 4).

  • приложение должно быть написано в WPF (не Silverlight).
  • основное приложение будет чрезвычайно тонким.
  • основное приложение будет использовать веб-сервис для создания меню "приложения / модули" человек имеет доступ.
  • в "приложения / модули" будут полностью содержаться в других управляемых библиотеках.
  • основное приложение получает представления и viewmodels, отражая в этих библиотеках DLL.
  • основное приложение должно подавать в службы для ведения журнала и т. д. в эти "приложения / модули".

например:

у основного пользователя могут быть параметры:

  • ViewOnly запись адреса

все связанные адреса элементов находятся в пределах Адрес.файл DLL.

продвинутый пользователь может иметь параметры:

  • новая запись адреса
  • открыть запись адреса (обновить/удалить)
  • управление пользователи

все связанные адреса элементов находятся в пределах адреса.файл DLL.
Все связанные элементы управления находятся в Admin.файл DLL.

Приложение не должно фактически ссылаться ни на одну из этих библиотек DLL, я планирую отразить в них, чтобы, если есть 100 различных модулей и пользователь имеет доступ только к 2 из них, только 2 из них загружаются и используются. В то время как пользователь, который имеет доступ к 10 из них получает эти 10.

Я уже решил загрузку DLL через WebService. :)

4 ответов


Не "лучше": это разные вещи.

IMO ваш выбор должен управляться только вашими требованиями. Исходя из требований, которые вы разместили здесь, я бы предложил вам использовать MEF, потому что у вас есть модули, содержащиеся в DLL, и основное приложение не знает о модулях для загрузки. Эти задачи являются причиной того, что MEF существует.

в любом случае вы можете использовать их оба: MEF для модульности и единства, чтобы воспользоваться преимуществами инъекции зависимостей (тестируемость, повторное использование, ...)


Если все модули не перекомпилируются одновременно с приложением, то MEF дает вам множество способов справиться с изменением интерфейсов в главном приложении. В противном случае MEF мая быть более сложным, чем вам нужно.


Я использую Unity более года с PRISM, но я заметил некоторые серьезные проблемы с утечкой памяти. Поэтому я решил дать PRISM 4 и MEF пойти. То, что я сделал, это сначала преобразовать мое приложение для использования PRISM 4 с Unity. Затем я преобразовал ветку в использование MEF. Это может показаться смешным, но MEF, похоже, обрабатывает потребление памяти и выпускает как-то лучше, чем Unity.

было бы приятно услышать, сделали ли другие тот же опыт?


Что касается вашего вопроса, Могут ли MEF и UNITY хорошо работать друг с другом, я могу сказать вам, что они действительно хорошо работают друг с другом. Я разработал доказательство применения концепции, в которой использовались PRISM, Unity и MEF.