Избегание ссылок на сборки при использовании IoC в многослойном приложении - PullRequest
4 голосов
/ 30 ноября 2011

Быстрый вопрос, поэтому я начинаю в правильном направлении.У меня есть мультипроектное решение с уровнем представления MVC.В настоящее время этот уровень знает только о библиотеке классов IServices.Теперь, если я хочу использовать IoC, мне кажется, что мне придется начать добавлять ссылки на все другие проекты в моем решении в приложении MVC, чтобы я мог настроить IoC.каждый слой имеет свой собственный IoC?

Спасибо,

Джеймс

1 Ответ

1 голос
/ 30 ноября 2011

Кто-то должен загрузить DLL-файлы, а кто-то сможет подключить IoC.

Как правило, загрузка DLL происходит автоматически, а проводка IoCпроисходит почти жестко.

Вы можете загружать библиотеки динамически: вы можете написать код, который пытается загрузить каждую DLL в заданную папку и вызвать какой-то метод GetLibraryDescriptor.Этот метод говорит вам, что библиотека обеспечивает реализацию, скажем, ISomeInterface.Теперь вы можете попросить DLL создать экземпляр объекта этого класса, который он предоставляет.Вам, вероятно, придется связать это создание с IoC.Я считаю, что такой дизайн лучше подходит для поиска сервисов.

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

Единственноепричина не ссылаться на другие библиотеки, которые я вижу, состоит в том, чтобы убедиться, что никто не использует напрямую или не обращается к коду, который там объявлен - утомительная задача, иногда невозможная цель, которая переносит инкапсуляцию на неправильный уровень.Если ваши классы хорошо инкапсулированы, в этом нет необходимости.

...