/// <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("*****@*****.**"); }
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)); }