Castle.MicroKernel.Context.DependencyTrackingScope.TrackDependency C# (CSharp) Method

TrackDependency() private method

private TrackDependency ( ComponentModel model, MemberInfo info, DependencyModel dependencyModel ) : DependencyModelExtended
model Castle.Core.ComponentModel
info System.Reflection.MemberInfo
dependencyModel Castle.Core.DependencyModel
return DependencyModelExtended
		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;
		}