ты чего до конструктора докопался? контейнер связывает контракт и реализацию, следит за временем жизни реализации, бьёт тебя по рукам из за циклических зависмостей, имеет детрминированные скоупы
ну а так тебя компилятор ударит по рукам при попытке инициализировать что-то циклически зависимое, время жизни прозрачно определяется в самом коде, скоупы сами собой определяются
когда у тебя калькулятор не от майкрософта - то конечно, если у тебя что то посложнее, то тут уже надо что то думать, и вот придумали контейнеры со скоупами