Призма 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.