I am developing an iOS app and I am moving to a VIPER-like architecture. It looks like this:View--ViewModel--Router--ViewModel--ViewThe difference from the VIPER is that I have have one global Router instead of many Wireframes (it is motivated by the app functionality: almost everything can be opened from anywhere). Router holds assemblers for different screens as well as menu and navigation controller. The problem is that the app is quite big and Router is injected with too many arguments. Its constructor looks like thisstruct RouterImpl: Router {    /* ... */    init(window: UIWindow,         mainNavigationController: MainNavigationController,         menuNavigationController: UISideMenuNavigationController,         menuViewControllerFactory: MenuViewControllerFactory,         splashScreenControllerFactory: SplashScreenFactory,         mainViewControllerFactory: MainViewControllerFactory,         webViewControllerFactory: WebViewControllerFactory,         locationPickingViewControllerFactory: LocationPickingViewControllerFactory,         cartViewControllerFactory: CartViewControllerFactory,         productScreenAssembler: ProductScreenAssembler,         personalAreaOrderItemsAssembler: PersonalAreaOrderItemsAssebler)}Where assembler is something that has view and viewModel factories and puts them together to create a single screen.If is already way bigger than it should be but it will be even bigger if it will be finished with the same design. What can I do to make it simpler or at least to make its constructor better?
Class depends on too many classes
design;ios;routing