A frontend split to matchadvanced
When each backend service has its own lazily-loaded frontend package and its own generated client, adding a service becomes adding a package rather than editing the shell everyone shares.
One Angular shell, one lazily-loaded package per backend service, and generated proxies so a backend rename breaks the build instead of production.
AssumesRoutes and GuardsThis stage is Angular and TypeScript at the end of an ASP.NET sprint. Without the routing stage you have not met loadChildren or RoutesService, and the stage will be lost on syntax rather than on architecture.
Adding a service adds a package and a config entry, and touches no shell component.
Published in full, before you start — every point is one of these and there is nothing else.
When each backend service has its own lazily-loaded frontend package and its own generated client, adding a service becomes adding a package rather than editing the shell everyone shares.
Authentication is who you are; authorization is what you are allowed to do. Policies keep that rule in one place instead of scattered if-statements.