public BuildCycleMessageFor ( IHandler duplicateHandler, System.StringBuilder message ) : void | ||
duplicateHandler | IHandler | |
message | System.StringBuilder | |
return | void |
/// <summary> /// Returns an instance of the component this handler /// is responsible for /// </summary> /// <param name = "context"> </param> /// <param name = "requiresDecommission"> </param> /// <param name = "instanceRequired"> </param> /// <param name = "burden"> </param> /// <returns> </returns> protected object ResolveCore(CreationContext context, bool requiresDecommission, bool instanceRequired, out Burden burden) { if (IsBeingResolvedInContext(context)) { var cache = lifestyleManager as IContextLifestyleManager; if (cache != null) { var instance = cache.GetContextInstance(context); if (instance != null) { burden = null; return instance; } } if (instanceRequired == false) { burden = null; return null; } var message = new StringBuilder(); message.AppendFormat("Dependency cycle has been detected when trying to resolve component '{0}'.", ComponentModel.Name); message.AppendLine(); message.AppendLine("The resolution tree that resulted in the cycle is the following:"); context.BuildCycleMessageFor(this, message); throw new CircularDependencyException(message.ToString(), ComponentModel); } if (CanResolvePendingDependencies(context) == false) { if (instanceRequired == false) { burden = null; return null; } AssertNotWaitingForDependency(); } try { using (var ctx = context.EnterResolutionContext(this, requiresDecommission)) { var instance = lifestyleManager.Resolve(context, context.ReleasePolicy); burden = ctx.Burden; return instance; } } catch (NoResolvableConstructorFoundException) { throw UnresolvableHandlerException(); } }