Шаблон реестра
Шаблон реестра — это шаблон, используемый для поиска объекта, зная только его имя. Этот шаблон хранит экземпляры объектов внутри и использует сопоставление словаря для последующего извлечения этих экземпляров.
Контейнер DI/паттерн DI
Контейнер внедрения зависимостей содержит реестр, в котором типы объектов сопоставлены с абстракциями. Он более продвинут в том смысле, что при разрешении объекта создается его экземпляр, как и все зависимости объекта.
Когда вы запрашиваете объект из контейнера внедрения зависимостей, вы получаете граф объектов, начиная с запрашиваемого объекта в качестве корня. Каждый зависимый объект внедряется автоматически путем рекурсивного прохождения конструктора каждого класса, начиная с классов, не имеющих зависимостей, и создания экземпляра каждого объекта, используя реестр в качестве ориентира.
Внедрение зависимостей — это шаблон, который не обязательно использовать контейнер внедрения зависимостей. Шаблон внедрения зависимостей состоит из корня композиции, который находится в точке входа. приложения. Корень композиции — это место, где регистрируются типы и создается экземпляр корневого графа объектов. После создания экземпляра корневого объекта приложение запускается самостоятельно. Само приложение не имеет ссылки на контейнер внедрения зависимостей и не связано с ним жестко.
Поиск сервисов
Многие считают, что локатор службы является анти-шаблоном. Идея состоит в том, что вы либо внедряете контейнер в свой объект, либо используете статическую ссылку на контейнер DI для создания экземпляров во время выполнения.
Основное отличие заключается в том, что приложение явно зависит от (таким образом, тесно связано) контейнера внедрения зависимостей.
Еще одним недостатком использования Service Locator является то, что, поскольку вы внедряете контейнер DI, невозможно увидеть из конструкторов классов, от каких интерфейсов он зависит. Вместо этого вам нужно обратиться к документации или проанализировать исходный код, чтобы определить, каковы зависимости класса.
Несмотря на то, что он считается анти-шаблоном, все же есть ситуации, когда его использование имеет смысл. Тем не менее, это следует рассматривать как крайнюю меру после того, как все другие варианты (окружающий контекст, внедрение свойств и т. д.) исчерпаны.
person
NightOwl888
schedule
16.08.2015