Справка
Внутреннее устройство container
Binding, aliases и autowiring в рамках поддерживаемого публичного API.
Binding и время жизни сервисов
Для интерфейсов и важных сервисов используйте явные binding. singleton() разделяет один экземпляр, а set() создаёт сервис при каждом разрешении.
Autowiring
Autowiring может создавать конкретные классы, если их зависимости можно разрешить. Он не заменяет понятную композицию приложения.
Держите container на границе композиции
Используйте container как инструмент композиции приложения, а не как service locator внутри доменной логики.