private DependencyModelExtended TrackDependency(ComponentModel model, MemberInfo info, DependencyModel dependencyModel)
{
var trackingKey = new DependencyModelExtended(model, dependencyModel, info);
if (dependencies.Contains(trackingKey))
{
var message = new StringBuilder("A cycle was detected when trying to resolve a dependency. ");
message.Append("The dependency graph that resulted in a cycle is:");
foreach (var key in dependencies)
{
var extendedInfo = key as DependencyModelExtended;
if (extendedInfo != null)
{
message.AppendLine();
message.AppendFormat(" - {0} for {1} in type {2}",
key, extendedInfo.Info, extendedInfo.Info.DeclaringType);
}
else
{
message.AppendLine();
message.AppendFormat(" - {0}", key);
}
}
message.AppendLine();
message.AppendFormat(" + {0} for {1} in {2}",
dependencyModel, info, info.DeclaringType);
message.AppendLine();
throw new CircularDependencyException(message.ToString());
}
dependencies.Add(trackingKey);
return trackingKey;
}