private List <ModuleMetadata> GetLoadOrder() { Dictionary <string, ModuleMetadata> indexedInfo = new Dictionary <string, ModuleMetadata>(); ModuleDependencySolver solver = new ModuleDependencySolver(); List <ModuleMetadata> result = new List <ModuleMetadata>(); foreach (ModuleMetadata data in loadedModules.Values) { if (indexedInfo.ContainsKey(data.Name)) { throw new ModuleLoadException(String.Format(CultureInfo.CurrentCulture, Properties.Resources.DuplicatedModule, data.Name)); } indexedInfo.Add(data.Name, data); solver.AddModule(data.Name); foreach (string dependency in data.Dependencies) { solver.AddDependency(data.Name, dependency); } } if (solver.ModuleCount > 0) { string[] loadOrder = solver.Solve(); for (int i = 0; i < loadOrder.Length; i++) { result.Add(indexedInfo[loadOrder[i]]); } } return(result); }
private List<ModuleMetadata> GetLoadOrder() { Dictionary<string, ModuleMetadata> indexedInfo = new Dictionary<string, ModuleMetadata>(); ModuleDependencySolver solver = new ModuleDependencySolver(); List<ModuleMetadata> result = new List<ModuleMetadata>(); foreach (ModuleMetadata data in loadedModules.Values) { if (indexedInfo.ContainsKey(data.Name)) throw new ModuleLoadException(String.Format(CultureInfo.CurrentCulture, Properties.Resources.DuplicatedModule, data.Name)); indexedInfo.Add(data.Name, data); solver.AddModule(data.Name); foreach (string dependency in data.Dependencies) solver.AddDependency(data.Name, dependency); } if (solver.ModuleCount > 0) { string[] loadOrder = solver.Solve(); for (int i = 0; i < loadOrder.Length; i++) result.Add(indexedInfo[loadOrder[i]]); } return result; }