Подтвердить что ты не робот

Призма v4: Единство или MEF?

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

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

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

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

Например:

У базового пользователя могут быть следующие опции:

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

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

У расширенного пользователя могут быть следующие опции:

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

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



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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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