[C#/COMMON/.NET6] IValidatableObject 인터페이스 : Validate 메소드를 사용해 객체 검증하기
C#/Common 2022. 10. 19. 16:11728x90
반응형
728x170
■ IValidatableObject 인터페이스의 Validate 메소드를 사용해 객체를 검증하는 방법을 보여준다.
▶ Student.cs
using System.ComponentModel.DataAnnotations;
namespace TestProject;
/// <summary>
/// 학생
/// </summary>
public class Student : IValidatableObject
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 이용 가능 여부 - Enabled
/// <summary>
/// 이용 가능 여부
/// </summary>
[Required]
public bool Enabled { get; set; }
#endregion
#region 등급 1 - Grade1
/// <summary>
/// 등급 1
/// </summary>
[Range(1, 5)]
public int Grade1 { get; set; }
#endregion
#region 등급 2 - Grade2
/// <summary>
/// 등급 2
/// </summary>
[Range(1, 5)]
public int Grade2 { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 검증하기 - Validate(context)
/// <summary>
/// 검증하기
/// </summary>
/// <param name="context">검증 컨텍스트</param>
/// <returns>검증 결과 열거 가능형</returns>
public IEnumerable<ValidationResult> Validate(ValidationContext context)
{
List<ValidationResult> validationResultList = new List<ValidationResult>();
if(Enabled)
{
Validator.TryValidateProperty
(
Grade1,
new ValidationContext(this, null, null) { MemberName = "Grade1" },
validationResultList
);
Validator.TryValidateProperty
(
Grade2,
new ValidationContext(this, null, null) { MemberName = "Grade2" },
validationResultList
);
if(Grade1 > Grade2)
{
validationResultList.Add(new ValidationResult("Grade1은 Grade2보다 커야 합니다."));
}
}
return validationResultList;
}
#endregion
}
▶ Program.cs
using System.ComponentModel.DataAnnotations;
namespace TestProject;
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
Student student = new Student()
{
Enabled = true,
Grade1 = 15,
Grade2 = 12
};
bool validateAllProperties = false;
List<ValidationResult> validationResultList = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject
(
student, new ValidationContext(student, null, null),
validationResultList,
validateAllProperties
);
if(!isValid)
{
foreach(ValidationResult validationResult in validationResultList)
{
Console.WriteLine(validationResult);
}
}
}
#endregion
}
728x90
반응형
그리드형(광고전용)
댓글을 달아 주세요