Beispiel #1
0
        public void Add(string path, FormattedValidationResult validationResult)
        {
            var pieces = path.Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
            var node   = root;

            foreach (var edge in pieces)
            {
                if (node is ValidationResultTreeUniversalNode)
                {
                    node = ((ValidationResultTreeUniversalNode)node).GotoChild(edge);
                }
                else if (node is ValidationResultTreeArrayNode)
                {
                    node = ((ValidationResultTreeArrayNode)node).GotoChild(int.Parse(edge));
                }
                else
                {
                    var nodeType = node.GetType();
                    var field    = nodeType.GetField(edge, BindingFlags.Instance | BindingFlags.Public);
                    var child    = (ValidationResultTreeNode)field.GetValue(node);
                    if (child == null)
                    {
                        field.SetValue(node, child = ValidationResultTreeNodeBuilder.BuildFactory(field.FieldType, false)(node));
                    }
                    node = child;
                }
            }

            node.ValidationResults.Add(validationResult);
        }
        public Func <TChild, ValidationResultTreeNode> GetValidator <TChild>(Expression <Func <TData, TChild> > path)
        {
            var validator = GetValidatorInternal(path);
            var factory   = ValidationResultTreeNodeBuilder.BuildFactory(typeof(TChild), true);

            return(child =>
            {
                var tree = factory(null);
                validator(child, tree);
                return tree;
            });
        }
Beispiel #3
0
 public ValidationResultTreeNode()
 {
     root = ValidationResultTreeNodeBuilder.BuildFactory(typeof(T), true)(null);
 }