Ответ 1
Это звучит как инжектор зависимостей - это нечто иное, чем вы делаете. Это больше похоже на ServiceLocator, репозиторий или что-то еще. Обычно инжектор зависимостей находится между вызовом (если вы используете его для ввода параметров) или между созданием (если вы используете его для ввода поля или конструктора).
Использование инжектора зависимости должно быть полностью прозрачным для вводимого кода/объекта. Поэтому, если вы передадите ссылку, вы сделаете что-то не так.
Также DependencyInjector относится к среде, в которой работает ваш код. Смотрите, как есть. Инжектор зависимостей даже не должен быть известен приложению, если вы не используете приложение как фреймворк, в котором вы запускаете.
Таким образом, инъекция зависимости для работы означает отсутствие ссылки на инжектор в реальном приложении. Цель состоит в том, чтобы запустить приложение как с инъекцией, так и без него. Период.