private void AddDependancies(DependencyListNode <TModel, TKey> node) { var dependancies = DependancyFunc(node.Item); node.Dependencies.Clear(); if (dependancies == null) { return; } foreach (var dependancy in dependancies) { var dependantNode = Nodes .Where(n => n.Identifier.Equals(dependancy)) .FirstOrDefault(); if (dependantNode == null) { throw new InvalidOperationException("The dependency {0} hasn't been found.".With(dependancy)); } node.Dependencies.Add(dependantNode); } }
public void Add(TModel item) { var identifier = IdentifierFunc(item); var node = new DependencyListNode <TModel, TKey>(item, identifier); if (item is INotifyPropertyChanged) { ((INotifyPropertyChanged)item).PropertyChanged += (s, e) => { modified = true; } } ; Nodes.Add(node); modified = true; }
private static bool Visit(DependencyListNode <TModel, TKey> node, List <DependencyListNode <TModel, TKey> > list, DependencyListNode <TModel, TKey> root) { if (node.Visited) { return(node.Root != root); } node.Visited = true; node.Root = root; foreach (var dependancy in node.Dependencies) { if (!Visit(dependancy, list, root) && node != root) { throw new InvalidOperationException("Cannot load cyclic dependency with {0}".With(dependancy.Identifier)); } } list.Add(node); return(true); }