Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
        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);
        }