У этого подхода была проблема в том, что классы были не Injectable и не могли в себя включать какие-то зависимости, например Router, MatDialog и иже с ними. Получалось так, что FooController был таким вот передастом, который принимал все что нужно аж от компонента и распихивал по дочерним классам, следовательно приобретая совершенно не нужные ему зависимости.
Было решено сделать ВСЕ классы Injectable, тем самым они все создавались вместе с компонентом, а в момент установки конфига у них был метод setConfig, его как и прежде вызывал FooController для каждого класса со своей частью конфига. При этом FooController перестал быть передастом и избавился от лишних пробросов зависимостей.
Новая проблема: В случае обновления Input config в компоненте - нужно как-то сбросить состояния классов.
Потенциальное решение номер 1: у каждого класса есть метод типа reset(), который сбрасывает все переменные состояния до дефолтных.
Потенциальное решение номер 2: вынести состояния из всех классов в подобие стора по группам, следовательно в момент, когда нужно сбросить состояние - просто инициализируем дефолтное состояние для группы в сторе
Потенциальное решение номер 3: не использовать для дочерних Injectable и оставить передастом FooController...