Tôi biết điều này đã được một thời gian, nhưng tôi đạt được điều này như sau:
Tuỳ chỉnh Validator:
public class MyValidator : PropertyValidator
{
public MyValidator()
: base("Value must be null or between 0 and 3.")
{
}
protected override bool IsValid(PropertyValidatorContext context)
{
if (context.PropertyValue == null)
{
return true;
}
var value = (decimal)context.PropertyValue;
return value >= 0m && value <= 3m;
}
}
thử nghiệm Validator:
public class TestValidator : InlineValidator<TestObject>
{
public TestValidator (params Action<TestValidator >[] actions)
{
foreach (var action in actions)
{
action(this);
}
}
}
Kiểm tra đối tượng:
public class TestObject
{
public TestObject(decimal? val)
{
this.GenericDecimal = val;
}
public decimal? GenericDecimal { get; set; }
}
Test:
[Test]
public void TestIt()
{
var validator = new TestValidator(v => v.RuleFor(obj => obj.GenericDecimal).SetValidator(new MyValidator()));
Assert.IsTrue(validator.Validate(new TestObject(null)).IsValid);
Assert.IsTrue(validator.Validate(new TestObject(0m)).IsValid);
Assert.IsTrue(validator.Validate(new TestObject(3m)).IsValid);
Assert.IsFalse(validator.Validate(new TestObject(-1m)).IsValid);
Assert.IsFalse(validator.Validate(new TestObject(3.01m)).IsValid);
}
@wonea xem xét [kiểm tra có sẵn] (https://github.com/JeremySkinner/FluentValidation/blob/master/src/FluentValidation.Tests/PropertyValidatorTester.cs) tại [site project] (https://github.com) /JeremySkinner/FluentValidation/tree/master/src/FluentValidation.Tests) cho thấy các câu trả lời được cung cấp ở đây khớp với những gì chủ sở hữu sử dụng để kiểm tra nguồn. – Nkosi
@wonea và dựa trên dấu thời gian trên các bài kiểm tra có liên quan mà chúng chưa thay đổi trong vòng 2 năm qua. – Nkosi