internal static string VisualizeIndentedObjectGraph(this InstanceProducer producer, VisualizationOptions options) { if (!producer.IsExpressionCreated) { return(ExpressionNotCreatedYetMessage); } var set = new HashSet <InstanceProducer>(InstanceProducer.EqualityComparer); var objectGraphBuilder = new ObjectGraphBuilder(options.IncludeLifestyleInformation); producer.VisualizeIndentedObjectGraph(indentingDepth: 0, last: true, set: set, objectGraphBuilder: objectGraphBuilder); return(objectGraphBuilder.ToString()); }
private static void VisualizeIndentedObjectSubGraph(this InstanceProducer dependency, int indentingDepth, bool last, HashSet <InstanceProducer> set, ObjectGraphBuilder objectGraphBuilder) { bool isCyclicGraph = set.Contains(dependency); if (isCyclicGraph) { objectGraphBuilder.AppendCyclicInstanceProducer(dependency, last); return; } set.Add(dependency); try { dependency.VisualizeIndentedObjectGraph(indentingDepth, last, set, objectGraphBuilder); } finally { set.Remove(dependency); } }
private static void VisualizeIndentedObjectGraph(this InstanceProducer producer, int indentingDepth, bool last, HashSet <InstanceProducer> set, ObjectGraphBuilder objectGraphBuilder) { objectGraphBuilder.BeginInstanceProducer(producer); var dependencies = producer .GetRelationships() .Select(relationship => relationship.Dependency) .ToList(); for (int counter = 0; counter < dependencies.Count; counter++) { var dependency = dependencies[counter]; dependency.VisualizeIndentedObjectSubGraph(indentingDepth + 1, counter + 1 == dependencies.Count, set, objectGraphBuilder); } objectGraphBuilder.EndInstanceProducer(last); }