Prism v4: единство или MEF? - PullRequest
       47

Prism v4: единство или MEF?

30 голосов
/ 03 декабря 2010

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

  • Только для настольных ПК - Откройте модульность с Mef QuickStart.bat
  • Только для настольных ПК - Откройте модульность с Unity QuickStart.bat

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

  • Приложение должно быть написано в формате WPF ( НЕ Silverlight).
  • Основное приложение будет чрезвычайно тонким.
  • Основное приложение будет использовать веб-службу для создания меню «приложений / модулей», к которым у человека есть доступ.
  • «Приложения / модули» будут полностью содержаться в других управляемых библиотеках.
  • Основное приложение получает представления и модели представлений путем отражения в этих библиотеках.
  • Основное приложение должно вводить службы для регистрации и т. Д. В эти "приложения / модули".

Например:

Обычный пользователь может иметь следующие параметры:

  • ViewOnly Адресная запись

Все элементы, связанные с адресом, находятся в пределах Address.dll.

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

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

Все элементы, связанные с адресом, находятся в пределах Address.dll.
Все элементы управления связаны внутри Admin.dll.

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

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

Ответы [ 4 ]

21 голосов
/ 03 декабря 2010

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

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

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

4 голосов
/ 03 декабря 2010

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

2 голосов
/ 01 июля 2011

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

2 голосов
/ 12 февраля 2011

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

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

...