Не очень понятно, в чем вопрос, но я попробую.
Когда речь идет о вещах, которые являются специфическими для приложения (например, модели,
контроллеры и т. д.), как мне управлять автоматическим впрыском
зависимостей?
Вы используете DIC? Вы написали одну или используете библиотеку?
Может быть, библиотека помогла бы, я автор PHP-DI , поэтому я пристрастен, но библиотека помогает мне автоматически вводить зависимости.
Например, я могу написать:
class UserController
{
private $formFactory;
public function __construct(FormFactory $formFactory) {
$this->formFactory = $formFactory;
}
public function createForm($type, $data, $options) {
// $this->formFactory->...
}
}
В этой ситуации DIC может определять зависимости, которые хочет ваш контроллер, и автоматически вводить их. Это облегчает жизнь.
У меня, кажется, есть БОЛЬШОЙ веб-сайт, возможно, с 30-40 различными типами
модели ... я действительно создаю единый менеджер зависимостей приложений для
справиться с каждым из этих различных типов?
Зачем вам это нужно? Я не понимаю необходимости, может быть, вам нужно немного объяснить, в чем проблема.
У меня были люди, которые говорили мне, что DIC не предназначены для домена,
но больше для фреймворка, и я также слышал обратное.
Что "правильно"?
IMO нет никакой разницы между "доменными вещами" и "структурными вещами". Единственное, что сложно, это наличие в сущности элементов DIC, потому что это не «синглтон» (не в шаблоне Singleton): эти объекты не «управляются» DIC, вы можете создавать экземпляры вручную везде в вашем коде. Пример:
$user = new User();
Если классу User нужен сервис, то везде в вашем коде вы должны сделать:
$user = new User($service);
Напротив, вам никогда не нужно создавать службу вручную (вам никогда не нужно вызывать «new»), поэтому вы можете позволить контейнеру создать экземпляр и внедрить все.
Я не очень доволен своим ответом, так как он немного расплывчатый, но мне трудно определить, в чем действительно твоя проблема. Может быть, вам следует привести примеры кода или хотя бы немного объяснить.
PS: я изо всех сил пытался понять DI и что такое DIC, не соглашайтесь на «Я думаю, что я получаю немного больше сейчас, хотя и не полностью», я сделал то же самое, и мне потребовались месяцы, чтобы наконец-то понял.
Если это поможет, прочитайте вводный текст на http://mnapoli.github.io/PHP-DI/ и, возможно, также: http://mnapoli.fr/controllers-as-services/ (не имеет прямого отношения, но может помочь)