public void OnSetupModule(Action <ModuleShellOptionsBuilder <TModule> > configureModuleOptionsBuilder)
        {
            Services.AddSingleton <IModuleManager <TModule>, ModuleManager <TModule> >((sp) =>
            {
                var routeHandler  = DefaultRouteHandlerFactory();
                var modulesRouter = new ModulesRouter <TModule>(routeHandler);

                var allModules    = sp.GetServices <TModule>();
                var moduleManager = new ModuleManager <TModule>(modulesRouter);

                // todo consider notifying subscribers when new module container is created.
                //  var containerEventsPublisher = sp.GetServices<IContainerEventsPublisher<TModule>>();

                foreach (var item in allModules)
                {
                    var moduleOptionsBuilder = new ModuleShellOptionsBuilder <TModule>(item);
                    configureModuleOptionsBuilder(moduleOptionsBuilder);
                    var moduleShellOptions = moduleOptionsBuilder.Build();
                    var moduleShell        = new ModuleShell <TModule>(item, moduleShellOptions);
                    moduleManager.AddModule(moduleShell);
                }

                return(moduleManager);
            });
        }
 public ModuleManager(ModulesRouter <TModule> modulesRouter)
 {
     _modules      = new List <IModuleShell <TModule> >();
     ModulesRouter = modulesRouter;
 }