натыкался кстати где-то на статью, где все модальные окна в проекте выносили в отдельный сервис, который инжектил в себя matdialog. и вызывали из других мест и сервисов мол openLoginDialog(), openConfirmDialog(), безе передачи самих компонентов, все были в одном месте
На первый взгляд выглядит хорошо. Но только на первый взгляд.
А если понадобится переиспользовать ConfirmDialog в другом проекте? Получится что нужно выковырять метод openConfirmDialog
перенести его в другой проект, попутно туда скопировав кусок этого сервиса, отвечающего за инициализацию, потом окажется, что там еще был флажок isConfirmDialogOpened и где-то сбрасывался, а при переносе его забыли сбросить - так как это было в другом методе.
Итого, нарушили принцип единой ответственности ради якобы удобства поиска реализации, получили проблемы с переиспользованием.
На мой взгляд, правильнее было бы создать папочку /dialogs в которой для каждого такого диалога, сделать свой сервис - единая ответственность, все инкапсулировано в одном сервисе - переносится в другой проект легко, искать легко и предсказуемо, так как все сервисы у нас в папке /dialogs. Все каноны соблюдены и это доказано гибкостью на практике.