Архитектура Blazor Server приложения
Начал изучать Blazor Server. Во время разработки столкнулся с проблемой передачи данных между компонентами. Мне кажется я совершил ошибку в архитектуре решения. Прошу подсказать мне, как сделать правильно.
А теперь к сути:
Есть SPA приложение - по сути это сайт для планшета, на который по очереди выводятся компоненты. Например страница авторизации -> ожидание команды от сервера (бесконечное) -> компонент с вводом информации (допустим номер телефона и фио) -> компонент с графическим редактором (допустим для росписи) -> снова в ожидание команды от сервера.
Тут у меня чисто линейное взаимодействие между компонентами, происходящие по событию от сервера в начале (сигналом SignalR), а затем вызов друг друга по цепочке (чем то напоминает страницу заполнения тестов\форм, где есть кнопки "Далее" -> "Далее" и "шаг 1 из 5" ).
Проблема заключается в передаче данных между компонентами в такой структуре. Во всех примерах для Blazor приложения существует главная страница, в которых по какому то событию UI (например переключение по NavMenu) идет замена отрисовываемого компонента через простой вызов:
<SomeComponent param1="value" param2=111>
В таком вызове компонента "По Имени" спокойно передаются параметры, каскадные значения и тд. В моем же решении не происходит никаких действий UI и главная страница приложения по сути - пустая страница. По этому я не могу использовать (или не знаю как правильно) вызов компонента "по имени".
Очевидным для меня решением было использовать NavigationManager и просто делать NavigateTo на следующий по цепочке компонент.
Очевидно, когда проект разросся такой метод дал слабину - через Navigation не работает практически никакой функционал передачи данных между компонентами (либо я просто слепой и не могу найти пример, как такое сделать), и я зашел в тупик.
Итог:
Как я понял, у меня получилась кривая версия "событийно-ориентированной архитектуры" для Blazor Server проекта.
И сразу возникает вопрос: что я не так сделал, и каким образом это исправить - переписать архитектуру (опять не понятно как работать без интерфейса на главном компоненте Blazor), либо попытаться найти способ передавать сложносочиненные данные с использованием NavigateTo.
Хотелось бы получить помощь в моем вопросе. Благодарю всех, кто дочитал до конца )