public IEnumerable <IDependency> Invoke( Guid parentCiId, IResoucesByIdQuery getResources) { var checkedItems = new List <Guid>(); Func <Guid, IResoucesByIdQuery, IEnumerable <IDependency> > invoke = null; invoke = (pcid, gr) => { if (!checkedItems.Contains(pcid)) { checkedItems.Add(pcid); var drs = gr.Invoke(pcid).ToArray(); foreach (var relatedResource in drs) { relatedResource .Resource .DependentResources = invoke(relatedResource.Resource.Id, gr); } return(drs); } return(Enumerable.Empty <IDependency>()); }; }
public IEnumerable <IDependency> Invoke(Guid parentCiId, IResoucesByIdQuery getResources) { Reset(); return(InternalInvoke(parentCiID, getResources)); }
private IEnumerable <IDependency> InternalInvoke(Guid parentCiId, IResoucesByIdQuery getResources) { //actual implementation, when going recursive, call this internal method }