Различия между MEF, EntLib и Prism - PullRequest
5 голосов
/ 11 ноября 2010

У меня есть относительно простой вопрос, но больше всего мне нужна некоторая ясность, я использую Prism (Руководство по составным приложениям) для создания настольного приложения WPF MVVM в C #, с этим битом у меня все ясно (или я такподумал) вместе с архитектурой на основе IoC и модулем и т. д. В то же время я начал использовать MEF и понял, что между ними есть своего рода серая область (я нашел и прочитал ряд статей / блогов по размещению расширений MEF вКонтейнеры IoC и т. П.

Однако ... недавно я начал изучать Enterprise Library 5, и это привело меня в замешательство. Где они все сочетаются друг с другом? Итак, Prism использует DI с модулем на основеархитектура ... EntLib использует Di с архитектурой типа Application Block ... и MEF вообще не использует DI? Означает ли это, что EntLib и Prism являются полностью отдельными архитектурными методами или один является подмножеством другого?MEF будет использоваться с одним или обоими?

Любое объяснение будет бДобро пожаловать.

Большое спасибо

Ответы [ 2 ]

10 голосов
/ 11 ноября 2010

Я тоже был озадачен разницей между IoC и MEF.Простейший способ, которым я их описал, заключался в следующем:

MEF - для обнаружения и создания экземпляров того, о чем вы не знаете.

IoC - для запроса чего-то, о чем вы действительно знаете.

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

IoC, с другой стороны - вы запрашиваете реализацию из текущей библиотеки и получаете ее.Но вы также несете ответственность за обеспечение реализации.

IoC для внедрения зависимости.MEF для расширяемости.

3 голосов
/ 11 ноября 2010

Взгляните на эти 2 сообщения:

Что касается Enterprise Library, в v5.0 мы сделали ее независимой от контейнера . Несмотря на то, что Enterprise Library поставляется с контейнером Unity «из коробки», она спроектирована для работы с любым контейнером на ваш выбор или MEF. Вам необходимо предоставить соответствующий конфигуратор (см. Информацию о конфигураторах в конце этого резюме )

...