private void WeightModulesByDependants(ModuleDependencyViewModel model) { // process sizes of the modules var incomingDeps = model.Links.GroupBy(_ => _.To) .Select(group => new { Name = group.Key, Count = group.Count() }); foreach (var incomingDep in incomingDeps) { var m = model.Nodes.First(_ => _.Id == incomingDep.Name); m.Size = m.Size + incomingDep.Count * 2; } }
public ActionResult Index(bool showAll = false) { var sortedModules = GetSortedModules(); var modules = from module in sortedModules let asmName = module.Type.Assembly.GetName().Name + ".dll" select new ModuleInfo { Id = module.Type.FullName, ModuleType = module.Type, Label = module.Type.Name, Title = $"Name: {module.Type.Name}<br>Type: {(typeof(IConfigurableModule).IsAssignableFrom(module.Type) ? "Configurable" : "Initializable")}<br>Namespace: {module.Type.Namespace}<br>Assembly: {asmName}", Group = GetAssemblyGroup(asmName) }; var dependencies = sortedModules.Where(_ => _.Dependencies.Count > 0).SelectMany(_ => _.Dependencies, (from, to) => new ModuleDependency { From = from.Type.FullName, To = to.FullName }); if (!showAll) { dependencies = dependencies.Where(_ => !_.From.StartsWith("EPiServer")); modules = modules.Where(m => !m.ModuleType.FullName.StartsWith("EPiServer")) .Union(modules.Where(m => dependencies.Any(d => d.To == m.ModuleType.FullName))) .DistinctBy(_ => _.Id).ToList(); } var model = new ModuleDependencyViewModel { Nodes = modules.ToList(), Links = dependencies.ToList(), ShowAll = showAll }; WeightModulesByDependants(model); return(View(model)); }