В настоящее время я пишу свою собственную инфраструктуру MVC для целей обучения, и я решил использовать контейнер внедрения зависимостей для совместного использования часто используемых объектов между классами (например, экземпляром БД).
Я инициализировал контейнер в моем файле начальной загрузки, и у меня есть экземпляр этого в моем Application
класс, это хорошая практика для передачи экземпляра контейнера во время процесса маршрутизации? (т.е. передача объекта контейнера в качестве параметра в ControllerBase
конструктор). Кроме того, это хорошая практика, чтобы принять контейнер в качестве параметра в конструкторе моего ModelBase
?
Это звучит как инжектор зависимости, что-то отличное от того, что вы делаете. Это больше похоже на ServiceLocator, хранилище или что-то еще. Обычно Инжектор зависимостей находится между вызовом (если вы используете его для ввода параметров) или между созданием (если вы используете его для внедрения в поле или конструктор).
Использование инжектора зависимостей должно быть полностью прозрачным для кода / объекта, в который внедряется. Так что если вы передаете ссылку, вы делаете что-то не так.
Также DependencyInjector принадлежит к среде, в которой работает ваш код. Смотри как есть. Инжектор зависимостей даже не должен быть известен приложению, если вы не используете приложение как среду, в которой вы работаете.
Таким образом, получить внедрение зависимости для работы означает отсутствие ссылки на инжектор в реальном приложении. Цель состоит в том, чтобы запустить приложение в обе стороны с инъекцией или без. Период.
Других решений пока нет …