public String ObtainDependencyDetails(IList dependenciesChecked)
{
if (CurrentState == HandlerState.Valid)
{
return String.Empty;
}
if (dependenciesChecked.Contains(this))
{
return String.Empty;
}
dependenciesChecked.Add(this);
StringBuilder sb = new StringBuilder();
sb.AppendFormat("\r\n{0} is waiting for the following dependencies: \r\n", ComponentModel.Name);
if (DependenciesByService.Count != 0)
{
sb.Append("\r\nServices: \r\n");
foreach (Type type in DependenciesByService.Keys)
{
IHandler handler = Kernel.GetHandler(type);
if (handler == null)
{
sb.AppendFormat("- {0} which was not registered. \r\n", type.FullName);
}
else if (handler == this)
{
sb.AppendFormat("- {0}. \r\n A dependency cannot be satisfied by itself, " +
"did you forget to add a parameter name to differentiate between the " +
"two dependencies? \r\n", type.FullName);
}
else
{
sb.AppendFormat("- {0} which was registered but is also waiting for " +
"dependencies. \r\n", type.FullName);
IExposeDependencyInfo info = handler as IExposeDependencyInfo;
if (info != null)
{
sb.Append(info.ObtainDependencyDetails(dependenciesChecked));
}
}
}
}
if (DependenciesByKey.Count != 0)
{
sb.Append("\r\nKeys (components with specific keys)\r\n");
foreach (DictionaryEntry entry in DependenciesByKey)
{
String key = entry.Key.ToString();
IHandler handler = Kernel.GetHandler(key);
if (handler == null)
{
sb.AppendFormat("- {0} which was not registered. \r\n", key);
}
else
{
sb.AppendFormat("- {0} which was registered but is also " +
"waiting for dependencies. \r\n", key);
IExposeDependencyInfo info = handler as IExposeDependencyInfo;
if (info != null)
{
sb.Append(info.ObtainDependencyDetails(dependenciesChecked));
}
}
}
}
return sb.ToString();
}