자, 내가 열거 형의 값에 따라 조건부로 객체의 유효성을 검사하려고한다고 가정 해 봅시다. 어떻게 할 수 있습니까?Fluent Validation을 사용하는 enum보다 크거나 같은 비교입니까?
다음은 개체의 유효성을 검사하는 예제입니다.
MyObjectValidator validator = new MyObjectValidator();
ValidationResult results = validator.Validate(new MyObject());
다음은 Enum 값이있는 클래스의 샘플입니다.
public class MyObjectValidator : AbstractValidator<MyObject>
{
public MyObjectValidator()
{
RuleFor(x => x.anEnum).Equal(MyObject.MyEnum.First).SetValidator(new FirstValidator());
}
}
public class FirstValidator : AbstractValidator<MyObject>
{
public FirstValidator()
{
RuleFor(x => x.someDecimal).Equal(1).WithMessage("Decimal must equal 5 with anEnum set to First");
}
}
public class MyObject
{
public enum MyEnum : int
{
First = 0,
Second = 1,
Third = 2
}
public decimal someDecimal { get; set; }
public MyEnum anEnum { get; set; }
public MyObject()
{
anEnum = MyEnum.First;
someDecimal = 5;
}
}
이 특정 예제는 메시지를 던졌습니다 : "유효성 검사기 'FirstValidator가'MyEnum '유형의 구성원을 확인할 수 없습니다 - 유형이 호환되지 않습니다."
약간의 편집을 마친 후에 나는 원하는 것을하기 위해 래퍼를 만들었지 만,보다 세련된 솔루션을 선호합니다. 제가
public MyObjectValidator()
{
RuleFor(x => x.anEnum).SetValidator(new ValidatorWrapper<MyObject>()).When(x => x.anEnum == MyObject.MyEnum.First);
}
으로 MyObjectValidator를 대체 I 조건부 따라 규칙들을 확인할 수 있도록 propertyvalidator 래퍼를 제공하지 않고도, 내부 상황을 참조 할 수있는 방법이된다 검증 랩퍼
public class ValidatorWrapper<T> : PropertyValidator
{
public ValidatorWrapper() : base("Validator Message")
{
}
protected override bool IsValid(PropertyValidatorContext context)
{
MyObject myObj = (MyObject)context.Instance;
FirstValidator validator = new FirstValidator();
ValidationResult results = validator.Validate(myObj);
}
}
추가 enum 값에 따라?
유창함 검증은'평등()'이 아닌'같음()'라는 검증을 제공 규칙, 당신은 방법을 때 최상위을 사용하여 하나의 조건을 사용할 수 있습니다. – drharris
그리고'MyFirstEnumValidator' 무엇입니까? 간단하지만 완전한 * 예제가 실제로 여기에 도움이 될 것입니다 ... –
예제를 업데이트했습니다 –