/// <summary> /// Creates a new AbpModuleInfo object. /// </summary> public ModuleInfo([NotNull] Type type, [NotNull] AbstractModule instance) { Check.NotNull(type, nameof(type)); Check.NotNull(instance, nameof(instance)); Type = type; Instance = instance; Assembly = Type.GetTypeInfo().Assembly; Dependencies = new List <ModuleInfo>(); }
private void LoadAllModules() { Logger.Debug("Loading modules..."); var moduleTypes = AbstractModule.FindDependedModuleTypesRecursivelyIncludingGivenModule(_modules.StartupModuleType) .Distinct().ToList(); Logger.Debug("Found " + moduleTypes.Count + " modules in total."); RegisterModules(moduleTypes); CreateModules(moduleTypes); _modules.EnsureKernelModuleToBeFirst(); _modules.EnsureStartupModuleToBeLast(); SetDependencies(); Logger.DebugFormat("{0} modules loaded.", _modules.Count); }
private void SetDependencies() { foreach (var moduleInfo in _modules) { moduleInfo.Dependencies.Clear(); //Set dependencies for defined DependsOnAttribute attribute(s). foreach (var dependedModuleType in AbstractModule.FindDependedModuleTypes(moduleInfo.Type)) { var dependedModuleInfo = _modules.FirstOrDefault(m => m.Type == dependedModuleType); if (dependedModuleInfo == null) { throw new AppInitializationException("Could not find a depended module " + dependedModuleType.AssemblyQualifiedName + " for " + moduleInfo.Type.AssemblyQualifiedName); } if ((moduleInfo.Dependencies.FirstOrDefault(dm => dm.Type == dependedModuleType) == null)) { moduleInfo.Dependencies.Add(dependedModuleInfo); } } } }