Зачем использовать ServiceLocator, когда MEF присутствует?

Я размышлял над вопросом после того, как начал изучать Prism... почему мы должны использовать Service locator если у нас есть MEF чтобы удовлетворить весь импорт требуется.

Ссылка Common Service Locator для MEF

Я не понял, для чего это нужно, если они сосуществуют.

Это позволяет AttributelessImports (Я считаю, что экспорт должен быть сделан с использованием экспорта)??

Я также читал по этой ссылке на общий сервисный локатор, но не совсем понял использование Senario, если бот, если они сосуществуют.

Любая помощь в этом деле будет полезна...:)

1 ответ

Решение

Существуют шаблоны внедрения зависимостей и поиска сервисов. Оба шаблона могут быть использованы с MEF. Когда используешь [Import] или же [ImportingConstructor]Вы используете инъекцию зависимостей. С другой стороны, когда в вашем коде есть нечто подобное:

var someObject = exportProvider.GetExportedValue<ISomeType>();

вы используете сервис местоположения.

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

AFAIK, Prism использует расположение службы по крайней мере для загрузчика, но Prism не использует DI-каркас напрямую, потому что он хочет быть независимым от конкретной DI-каркаса (по умолчанию есть поддержка MEF и Unity). Вот почему Prism использует адаптеры для размещения DI/Service - это просто еще один уровень абстракции.

Другие вопросы по тегам