public void CreateDependencies()
        {
            foreach (FixtureVertex v in this.graph.Vertices)
            {
                FixtureVertex target = this.typeVertices[v.FixtureType] as FixtureVertex;
                if (target == null)
                {
                    throw new InvalidOperationException("Could not find vertex for fixture " + v.FixtureType.FullName);
                }

                // get DependsOn attributes
                foreach (DependsOnAttribute dependsOn in v.FixtureType.GetCustomAttributes(typeof(DependsOnAttribute), true))
                {
                    FixtureVertex source = this.typeVertices[dependsOn.ParentFixtureType] as FixtureVertex;
                    if (source == null)
                    {
                        continue;
                    }

                    if (this.graph.ContainsEdge(source, target))
                    {
                        continue;
                    }

                    this.graph.AddEdge(source, target);
                }
            }
        }
        public void AddFixture(Fixture fixture)
        {
            if (fixture == null)
            {
                throw new ArgumentNullException("fixture");
            }
            FixtureVertex v = this.AddFixtureVertex(fixture.Type);

            v.Fixtures.Add(fixture);
        }
        private FixtureVertex AddFixtureVertex(Type fixtureType)
        {
            FixtureVertex v = this.typeVertices[fixtureType] as FixtureVertex;

            if (v != null)
            {
                return(v);
            }

            v             = (FixtureVertex)this.graph.AddVertex();
            v.FixtureType = fixtureType;
            this.typeVertices.Add(fixtureType, v);
            return(v);
        }
                public bool MoveNext()
                {
                    if (fixtureEn == null)
                    {
                        if (!vertexEn.MoveNext())
                        {
                            return(false);
                        }
                        FixtureVertex v = vertexEn.Current as FixtureVertex;
                        this.fixtureEn = v.Fixtures.GetEnumerator();
                    }

                    while (!this.fixtureEn.MoveNext())
                    {
                        if (!vertexEn.MoveNext())
                        {
                            return(false);
                        }
                        FixtureVertex v = vertexEn.Current as FixtureVertex;
                        this.fixtureEn = v.Fixtures.GetEnumerator();
                    }

                    return(true);
                }