public void ProcessCircularDependencies(IEnumerable <ICircularDependency> circularDependencies) { foreach (var circularDependency in circularDependencies) { if (circularDependency.Nodes.Count == 0) { continue; } if (CircularDependencies.Contains(circularDependency)) { continue; } // Arrange the nodes into the order in which they were discovered. circularDependency.Nodes.Reverse(); CircularDependencies.Add(circularDependency); // Inform each node that it is a member of the circular dependency. foreach (var dependency in circularDependency.Nodes) { dependency.CircularDependencies.Add(circularDependency); } } }
/// <summary> /// Inspects the graph's nodes for circular dependencies. /// </summary> public void CheckForCircularDependencies() { foreach (var node in Nodes) { var circularDependencies = node.FindCircularDependencies(); if (circularDependencies != null) { ProcessCircularDependencies(circularDependencies); } } CircularDependencies.Sort(); }