protected string DefaultExplanation(DeleteBlockage blockage)
 {
     return(string.Format(
                "Unable to delete {0} while there are referencing {1} items, reason: {2}<br/>",
                blockage.Blocked.GetType().Name.Replace("DataObject", ""),
                blockage.Blocker.GetType().Name.Replace("DataObject", ""),
                blockage.Reason
                ));
 }
        protected void AddBlockage(string reason, IDataObject blocked, IDataObject blocker)
        {
            if (DeleteStack.IsResolved(blocker))
            {
                return;
            }

            var blockage = new DeleteBlockage
            {
                Reason     = reason,
                Blocked    = blocked,
                Blocker    = blocker,
                DeleteRoot = DeleteStack.RootObject,
                Parameters = this.Parameters
            };

            DeleteStack.BlockersDuringCurrentTraversal.Add(blockage);
            DeleteStack.AddUnresolvedDependency(blocked, blocker);

            // Trace
            var explain = ApplicationSettings.Container.Resolve <IDeleteBlockageExplanationProvider>();

            DeleteStack.Trace("BLOCKER: " + explain.Explain(blockage));
        }
 public virtual string Explain(DeleteBlockage blockage)
 {
     return(DefaultExplanation(blockage));
 }