/// <summary>
        /// Visits the subject.
        /// </summary>
        /// <param name="subject">The subject to visit.</param>
        protected void VisitSubject(Subject subject)
        {
            VisitConclusion(subject);

            if (subject.Media != null)
            {
                foreach (SourceReference reference in subject.Media)
                {
                    VisitSourceReference(reference);
                }
            }
        }
        protected virtual void VisitSubject(Subject subject)
        {
            VisitConclusion(subject);

            List<SourceReference> media = subject.Media;
            if (media != null)
            {
                foreach (SourceReference reference in media)
                {
                    reference.Accept(this);
                }
            }

            List<EvidenceReference> evidence = subject.Evidence;
            if (evidence != null)
            {
                foreach (EvidenceReference evidenceReference in evidence)
                {
                    evidenceReference.Accept(this);
                }
            }
        }
 protected override void VisitSubject(Subject subject)
 {
     BindIfNeeded(subject);
     base.VisitSubject(subject);
 }