/// <summary> /// /// </summary> /// <param name="defaultRouteHandler">The default route handler to use when no module route match.</param> /// <returns></returns> public ModuleRegisterBuilder <TModule> Build(Action <ModuleShellOptionsBuilder <TModule> > configureModuleOptionsBuilder, IRouteHandler defaultRouteHandler) { var services = ParentBuilder.Services; services.AddSingleton <IModuleManager <TModule>, ModuleManager <TModule> >((sp) => { var routeHandler = DefaultRouteHandler ?? sp.GetRequiredService <MvcRouteHandler>(); var allModules = sp.GetServices <TModule>(); var modulesRouter = new ModulesRouter <TModule>(routeHandler); var moduleManager = new ModuleManager <TModule>(modulesRouter); // shared modules all popualte the same service collection // var services = new ServiceCollection(); foreach (var item in allModules) { var moduleOptionsBuilder = new ModuleShellOptionsBuilder <TModule>(item); configureModuleOptionsBuilder(moduleOptionsBuilder); var moduleShellOptions = moduleOptionsBuilder.Build(); var routedModule = item as IRoutedModule; if (routedModule != null) // these need to be routed. { // modulesRouter. // var routedModuleOptions = moduleShellOptions as ModuleShellOptions<IRoutedModule>; var routedModuleShell = new RoutedModuleShell <TModule>(item, moduleShellOptions, modulesRouter); // var moduleShell = routedModuleShell as IModuleShell<TModule>; moduleManager.AddModule(routedModuleShell); } else { var nonRoutedModuleShell = new ModuleShell <TModule>(item, moduleShellOptions); // var moduleShell = routedModuleShell as IModuleShell<TModule>; moduleManager.AddModule(nonRoutedModuleShell); } } return(moduleManager); }); return(ParentBuilder); }
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); 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; }