Castle.MicroKernel.Handlers.DependencyInspector.InspectServiceDependency C# (CSharp) Method

InspectServiceDependency() private method

private InspectServiceDependency ( IHandler inspectingHandler, DependencyModel dependency, IKernel kernel ) : void
inspectingHandler IHandler
dependency Castle.Core.DependencyModel
kernel IKernel
return void
		private void InspectServiceDependency(IHandler inspectingHandler, DependencyModel dependency, IKernel kernel)
		{
			var type = dependency.TargetItemType;
			var handler = kernel.GetHandler(type);
			if (handler == null)
			{
				message.AppendFormat("- Service '{0}' which was not registered.", type.FullName ?? type.Name);
				message.AppendLine();
			}
			else if (handler == inspectingHandler)
			{
				var alternatives = kernel.GetHandlers(type);
				message.AppendFormat("- Service '{0}' which points back to the component itself.", type.FullName ?? type.Name);
				message.AppendLine();
				message.Append("A dependency cannot be satisfied by the component itself, did you forget to ");
				if (alternatives.Length == 1)
				{
					message.AppendLine("register other components for this service?");
				}
				else
				{
					message.AppendLine("make this a service override and point explicitly to a different component exposing this service?");
					message.AppendLine();
					message.Append("The following components also expose the service, but none of them can be resolved:");
					foreach (var maybeDecoratedHandler in alternatives.Where(maybeDecoratedHandler => maybeDecoratedHandler != inspectingHandler))
					{
						var info = maybeDecoratedHandler as IExposeDependencyInfo;
						if (info != null)
						{
							info.ObtainDependencyDetails(this);
						}
						else
						{
							message.AppendLine();
							message.AppendFormat("'{0}' is registered and is matching the required service, but cannot be resolved.",
							                     maybeDecoratedHandler.ComponentModel.Name);
						}
					}
				}
			}
			else
			{
				message.AppendFormat("- Service '{0}' which was registered but is also waiting for dependencies.", handler.ComponentModel.Name);
				var info = handler as IExposeDependencyInfo;
				if (info != null)
				{
					info.ObtainDependencyDetails(this);
				}
			}
		}