/// <summary>
        /// Verify the entire entity <br />
        /// 验证入口
        /// </summary>
        /// <param name="instance"></param>
        /// <returns></returns>
        public VerifyResult Verify(T instance)
        {
            if (instance is null)
            {
                return(_options.ReturnNullReferenceOrSuccess());
            }

            VerifyResult result1 = null, result2 = null, result3 = null;
            var          context = _objectResolver.Resolve(instance);

            if (_projectManager.TryResolve(_type, _name, out var project))
            {
                result1 = project.Verify(context);
            }

            if (_options.CustomValidatorEnabled)
            {
                result2 = CorrectEngine.ValidViaCustomValidators(context, _customValidatorManager.ResolveAll());
            }

            if (_options.AnnotationEnabled)
            {
                result3 = _annotationValidator.Verify(context);
            }

            if (result1 is null && result2 is null && result3 is null)
            {
                return(_options.ReturnUnregisterProjectForSuchTypeOrSuccess());
            }

            return(result1 is null
                ? VerifyResult.MakeTogether(result2, result3)
                : VerifyResult.Merge(result1, result2, result3));
        }
        public void GetValueContextFromInstanceObjectContextTest()
        {
            var instance = new NiceBoat
            {
                Name       = "NiceBoat1000",
                Length     = 1000,
                Width      = 30,
                CreateTime = DateTimeFactory.Create(2020, 12, 21),
                Email      = "*****@*****.**"
            };

            var context = _objectResolver.Resolve <NiceBoat>(instance);

            var value1 = context.GetValue("Name");
            var value2 = context.GetValue("Length");
            var value3 = context.GetValue("Width");
            var value4 = context.GetValue("CreateTime");
            var value5 = context.GetValue("Email");

            value1.MemberName.ShouldBe("Name");
            value1.MemberType.ShouldBe(TypeClass.StringClazz);
            value1.DeclaringType.ShouldBe(typeof(NiceBoat));
            value1.MemberKind.ShouldBe(VerifiableMemberKind.Property);
            value1.IsBasicType.ShouldBeTrue();
            value1.IncludeAnnotations.ShouldBeTrue();
            value1.Value.ShouldBe("NiceBoat1000");

            value2.MemberName.ShouldBe("Length");
            value2.MemberType.ShouldBe(TypeClass.LongClazz);
            value2.DeclaringType.ShouldBe(typeof(NiceBoat));
            value2.MemberKind.ShouldBe(VerifiableMemberKind.Property);
            value2.IsBasicType.ShouldBeTrue();
            value2.IncludeAnnotations.ShouldBeTrue();
            value2.Value.ShouldBe(1000);

            value3.MemberName.ShouldBe("Width");
            value3.MemberType.ShouldBe(TypeClass.LongClazz);
            value3.DeclaringType.ShouldBe(typeof(NiceBoat));
            value3.MemberKind.ShouldBe(VerifiableMemberKind.Property);
            value3.IsBasicType.ShouldBeTrue();
            value3.IncludeAnnotations.ShouldBeTrue();
            value3.Value.ShouldBe(30);

            value4.MemberName.ShouldBe("CreateTime");
            value4.MemberType.ShouldBe(TypeClass.DateTimeClazz);
            value4.DeclaringType.ShouldBe(typeof(NiceBoat));
            value4.MemberKind.ShouldBe(VerifiableMemberKind.Field);
            value4.IsBasicType.ShouldBeTrue();
            value4.IncludeAnnotations.ShouldBeTrue();
            value4.Value.ShouldBe(DateTimeFactory.Create(2020, 12, 21));

            value5.MemberName.ShouldBe("Email");
            value5.MemberType.ShouldBe(TypeClass.StringClazz);
            value5.DeclaringType.ShouldBe(typeof(NiceBoat));
            value5.MemberKind.ShouldBe(VerifiableMemberKind.Property);
            value5.IsBasicType.ShouldBeTrue();
            value5.IncludeAnnotations.ShouldBeTrue();
            value5.Value.ShouldBe("*****@*****.**");
        }
Beispiel #3
0
        public void InstanceWithDirectTypeCreateObjectContextTest()
        {
            var instance = new NiceBoat
            {
                Name       = "NiceBoat1000",
                Length     = 1000,
                Width      = 30,
                CreateTime = DateTimeFactory.Create(2020, 12, 21),
                Email      = "*****@*****.**"
            };

            var context = _objectResolver.Resolve(typeof(NiceBoat), instance);

            context.ShouldNotBeNull();
            context.Type.ShouldBe(typeof(NiceBoat));
            context.ObjectKind.ShouldBe(VerifiableObjectKind.StructureType);
            context.IsBasicType().ShouldBeFalse();
            context.Instance.ShouldBe(instance);
            context.KeyValueCollection.ShouldBeNull();
            context.InstanceName.ShouldBe("Instance");

            //annotations/attributes - class level
            context.IncludeAnnotations.ShouldBeTrue();
            context.Attributes.Count.ShouldBe(0);

            //member/value-contract
            context.GetMembers().Count().ShouldBe(5);

            context.GetMember("Name").MemberName.ShouldBe("Name");
            context.GetMember("Length").MemberName.ShouldBe("Length");
            context.GetMember("Width").MemberName.ShouldBe("Width");
            context.GetMember("CreateTime").MemberName.ShouldBe("CreateTime");
            context.GetMember("Email").MemberName.ShouldBe("Email");

            context.GetMember(0).MemberName.ShouldBe("Name");
            context.GetMember(1).MemberName.ShouldBe("Length");
            context.GetMember(2).MemberName.ShouldBe("Width");
            context.GetMember(3).MemberName.ShouldBe("Email"); //Property first
            context.GetMember(4).MemberName.ShouldBe("CreateTime");

            //value/value-context
            context.GetValues().Count().ShouldBe(5);

            context.GetValue("Name").MemberName.ShouldBe("Name");
            context.GetValue("Length").MemberName.ShouldBe("Length");
            context.GetValue("Width").MemberName.ShouldBe("Width");
            context.GetValue("CreateTime").MemberName.ShouldBe("CreateTime");
            context.GetValue("Email").MemberName.ShouldBe("Email");

            context.GetValue(0).MemberName.ShouldBe("Name");
            context.GetValue(1).MemberName.ShouldBe("Length");
            context.GetValue(2).MemberName.ShouldBe("Width");
            context.GetValue(3).MemberName.ShouldBe("Email"); //Property first
            context.GetValue(4).MemberName.ShouldBe("CreateTime");

            context.GetMemberMap().Count.ShouldBe(5);
            context.GetValueMap().Count.ShouldBe(5);
        }
        /// <summary>
        /// Verify the entire entity <br />
        /// 验证入口
        /// </summary>
        /// <param name="declaringType"></param>
        /// <param name="instance"></param>
        /// <returns></returns>
        public virtual VerifyResult Verify(Type declaringType, object instance)
        {
            var context = _objectResolver.Resolve(declaringType, instance);

            return(VerifyImpl(context));
        }