Что такое DI
для и что его использовать, когда у нас есть ServiceManager
?Zend Di vs ServiceManager зависимые контейнеры для инъекций
Они, кажется, похожи, так как в файлах конфигурации для обоих zend-di
и zend-servicemanager
мы можем настроить некоторые параметры, такие как aliases
и invokables
.
Я пытаюсь лучше понять, что происходит за кулисами с этими компонентами, и документация не дала мне достаточной информации.
Не могли бы вы рассказать мне, в чем разница, и когда я должен использовать Di
вместо ServiceManager
?
Существует хорошее обсуждение контейнеров в целом на http://www.php-fig.org/psr/psr-11/meta/ – Dennis
современный совет кажется «не использовать DI или SM» самостоятельно, если они уже не являются частью вашей структуры. Zend использует Factory-based Service Manager (который по существу является ограниченным контейнером DI), где вы должны позаботиться о том, чтобы * не * вводить какой-либо контейнер в любой из ваших собственных классов, но вы можете использовать контейнер как часть настройки вашего заявление. т. е. в Zend вы можете использовать средства самой структуры для настройки того, как ваши зависимости подключены. Некоторые недавние примеры приведены здесь: https://docs.zendframework.com/tutorials/getting-started/database-and-models/ – Dennis