Должен ли я передать Dependency Injection Container (DIC) в качестве параметра в MVC?

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

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

14

Решение

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

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

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

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

1

Другие решения

Других решений пока нет …