Призма v4: Единство или MEF?
Я загрузил Prism v4 и запустил установщик. Я зашел в каталог и запустил два следующих пакетных файла:
- Только для настольных компьютеров - Открытая модульность с Mef QuickStart.bat
- Только для настольных компьютеров - Открытая модульность с Unity QuickStart.bat
Когда я компилирую эти приложения, я не вижу никакой реальной разницы. Я искал MEF vs Unity, и я нашел некоторые плюсы/минусы, но ничего конкретно не говорится о том, что "лучше" (и я знаю, что это субъективно) с использованием в Prism. Возможно, если я перечислил свои требования, кто-то может указать мне на правильные технологии (даже если это не Prism 4).
- Приложение должно быть написано в WPF ( НЕ Silverlight).
- Основное приложение будет очень тонким.
- Основное приложение будет использовать веб-службу для создания меню "приложений/модулей", к которому имеет доступ человек.
- "Приложения/модули" будут полностью содержаться в других управляемых библиотеках.
- Основное приложение получает представления и режимы просмотра, отражая их в этих DLL.
- Основное приложение должно подавать службы для ведения журнала и т.д. в эти "приложения/модули".
Например:
У базового пользователя могут быть следующие опции:
Все элементы, связанные с адресом, находятся в Address.dll.
У расширенного пользователя могут быть следующие опции:
- Новая запись адреса
- Открыть запись адреса (обновить/удалить)
- Управление пользователями
Все элементы, связанные с адресом, находятся в Address.dll.
Все элементы Связанные файлы находятся в файле Admin.dll.
Приложение не должно ссылаться ни на одну из этих DLL, я планирую отразить их, чтобы, если есть 100 различных модулей, и пользователь имеет доступ только к двум из них, загружаются и используются только 2 из них. В то время как пользователь, имеющий доступ к 10 из них, получает те 10.
Я уже решил загрузить DLL через WebService.:)
Ответы
Ответ 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.