Exemplo n.º 1
0
        private List <ISuktAppModule> GetAllModule(IServiceCollection services)
        {
            var typeFinder = services.GetOrAddSingletonService <ITypeFinder, TypeFinder>();
            var typs       = typeFinder.Find(o => SuktAppModule.IsAppModule(o));
            var modules    = typs.Select(o => CreateModule(services, o)).Distinct();

            return(modules.ToList());
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获取所有需要加载的模块
        /// </summary>
        /// <returns></returns>
        private IReadOnlyList <ISuktAppModule> LoadModules()
        {
            List <ISuktAppModule> modules = new List <ISuktAppModule>();

            var module = _source.FirstOrDefault(o => o.GetType() == StartupModuleType);

            if (module == null)
            {
                throw new Exception($"类型为“{StartupModuleType.FullName}”的模块实例无法找到");
            }
            modules.Add(module);
            var dependeds = module.GetDependedTypes();

            foreach (var dependType in dependeds.Where(o => SuktAppModule.IsAppModule(o)))
            {
                var dependModule = _source.ToList().Find(m => m.GetType() == dependType);
                if (dependModule == null)
                {
                    throw new Exception($"加载模块{module.GetType().FullName}时无法找到依赖模块{dependType.FullName}");
                }
                modules.AddIfNotContains(dependModule);
            }
            return(modules);
        }