示例#1
0
        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);
                }
            }
        }
示例#2
0
        /// <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();
        }