/// <summary> /// 获取需要加载的模块 /// </summary> /// <returns></returns> private IReadOnlyList <IAppModule> LoadModules() { List <IAppModule> modules = new List <IAppModule>(); var module = _source.FirstOrDefault(o => o.GetType() == StartupModuleType); if (module == null) { throw new AppException($"类型为“{StartupModuleType.FullName}”的模块实例无法找到"); } modules.Add(module); var dependeds = module.GetDependedTypes(); foreach (var dependType in dependeds.Where(o => AppModule.IsAppModule(o))) { var dependModule = _source.ToList().Find(m => m.GetType() == dependType); if (dependModule == null) { throw new AppException($"加载模块{module.GetType().FullName}时无法找到依赖模块{dependType.FullName}"); } modules.AddIfNotContains(dependModule); } return(modules); }
/// <summary> /// 获取所有模块 /// </summary> /// <param name="services"></param> /// <returns></returns> private List <IAppModule> GetAllModule(IServiceCollection services) { var typeFinder = services.GetOrAddSingletonService <ITypeFinder, TypeFinder>(); var typs = typeFinder.Find(o => AppModule.IsAppModule(o)); var modules = typs.Select(o => CreateModule(services, o)).Distinct(); return(modules.ToList()); }