Должен ли я проходить контейнер для инъекций зависимостей (DIC) в качестве параметра в MVC?

В настоящее время я пишу свою собственную инфраструктуру MVC для обучения, и я решил использовать контейнер для инъекций Dependency для совместного использования общих используемых объектов между классами (например, экземпляр DB).

Я инициализировал контейнер в моем загрузочном файле, и у меня есть экземпляр его в моем классе Application, следует ли успешно передавать экземпляр контейнера во время процесса маршрутизации? (т.е. передать объект контейнера в качестве параметра в конструкторе ControllerBase). Кроме того, полезно ли принимать контейнер в качестве параметра в конструкторе моего ModelBase?

Ответы

Ответ 1

Это звучит как инжектор зависимостей - это нечто иное, чем вы делаете. Это больше похоже на ServiceLocator, репозиторий или что-то еще. Обычно инжектор зависимостей находится между вызовом (если вы используете его для ввода параметров) или между созданием (если вы используете его для ввода поля или конструктора).

Использование инжектора зависимости должно быть полностью прозрачным для вводимого кода/объекта. Поэтому, если вы передадите ссылку, вы сделаете что-то не так.

Также DependencyInjector относится к среде, в которой работает ваш код. Смотрите, как есть. Инжектор зависимостей даже не должен быть известен приложению, если вы не используете приложение как фреймворк, в котором вы запускаете.

Таким образом, инъекция зависимости для работы означает отсутствие ссылки на инжектор в реальном приложении. Цель состоит в том, чтобы запустить приложение как с инъекцией, так и без него. Период.