/// <summary>
        /// Validates the specified entity with respect to the current validation attribute.
        /// </summary>
        /// <param name="entity">The entity to validate.</param>
        /// <param name="validationContext">The context information about the validation operation.</param>
        /// <returns>
        /// An instance of the <see cref="T:System.ComponentModel.DataAnnotations.ValidationResult" /> class.
        /// </returns>
        protected override ValidationResult IsValid(object entity, ValidationContext validationContext)
        {
            var displayName = validationContext.DisplayName;
            var compositeResults = new CompositeValidationResult(string.Format("Validation for {0} failed!", displayName));

            if (entity is IEnumerable)
            {
                IEnumerable items = (IEnumerable)entity;

                var index = 0;
                foreach (var item in items)
                {
                    var validator = new DataAnnotationValidator();

                    validator.TryValidate(item);
                    var results = validator.ValidationResults;

                    if (results.Count != 0)
                    {
                        results.ForEach(x => compositeResults.AddResult(x, displayName, index));
                    }

                    index++;
                }

                return compositeResults;
            }
            else
            {
                var validator = new DataAnnotationValidator();

                validator.TryValidate(entity);
                var results = validator.ValidationResults;

                if (results.Count != 0)
                {
                    results.ForEach(x => compositeResults.AddResult(x, displayName));
                    return compositeResults;
                }
            }

            return ValidationResult.Success;
        }
        public void 驗證GrandFather()
        {
            var grandFather = new GrandFather
            {
                Name = "hi",
                Fathers = new List<Father>
                {
                    new Father
                    {
                        Name= "Father1",
                        Age=81,
                        Sons = new List<Son>
                        {
                            new Son{Name="91", Age=300},
                            new Son{Name = "92", Age= 11},
                            new Son{Name = "93", Age= 202},
                        }
                    },
                    new Father
                    {
                        Age=82,
                        Sons = new List<Son>
                        {
                            new Son{Name="F2_1", Age=-1},
                            new Son{Name = "F2_2", Age= -2},
                            new Son{Name = "F2_3", Age= 4},
                        }
                    },
                }
            };

            var validator = new DataAnnotationValidator();

            var isValid = validator.TryValidate(grandFather);

            Assert.AreEqual(false, isValid);

            Assert.AreEqual(7, validator.ValidationResults.Count);
        }
        public void 驗證Sons_IEnumerable()
        {
            var father = new Father
            {
                Age = 90,
                Name = "Fat",
                Sons = Enumerable.Repeat<Son>(new Son { Name = "91", Age = 300 }, 2)
            };

            var validator = new DataAnnotationValidator();

            var isValid = validator.TryValidate(father);

            Assert.AreEqual(false, isValid);

            Assert.AreEqual(2, validator.ValidationResults.Count);
        }
        public void 驗證ProductModel()
        {
            var productModel = new ProductModel
            {
                MyPerson = new Person { Id = 1, Name = string.Empty, Birthday = new DateTime(1991, 9, 1) },
                MyProduct = new Product { Cost = 100, SellPrice = 105 }
            };

            var validator = new DataAnnotationValidator();

            var isValid = validator.TryValidate(productModel);

            Assert.AreEqual(false, isValid);

            Assert.AreEqual(2, validator.ValidationResults.Count);
        }
        public void 驗證List集合是否能正常驗證Validation()
        {
            var father = new Father
            {
                Name = "Joey",
                Age = 999,
                Sons = new List<Son>
                {
                    new Son{Age=0},
                    new Son{Name=string.Empty, Age=200},
                    new Son{Name="91", Age=300},
                }
            };

            var validator = new DataAnnotationValidator();

            var isValid = validator.TryValidate(father);

            Assert.AreEqual(false, isValid);

            Assert.AreEqual(6, validator.ValidationResults.Count);
        }
 public static void BeforeFeature()
 {
     target = new DataAnnotationValidator();
 }