문제

다음 질문을 살펴보면 Custom .NET 속성의 실제 사용 @esteban이 제안한 솔루션을 어떻게 구현 하시겠습니까?

나는 코드가 언제 어디서 실행 될지에 대해 약간 혼란스러워합니다. 좋은 코드 샘플을 제공해 주시겠습니까?

나는 전에이 질문을했지만 제대로 표현하지 않았다고 생각합니다 ...

도움이 되었습니까?

해결책

귀하가 참조하는 질문/답변과 관련하여 데이터 계층 또는 검증을하는 클래스 자체에 실행되는 코드가 있다고 가정합니다. 이 코드는 검증 된 객체에 대한 반사를 사용하여 다른 속성을 가진 속성을 찾고 해당 속성의 해당 속성과 관련된 특정 유효성 검사 로직을 실행합니다.

다음과 같은 것처럼 보일 수 있습니다.

 public void Validate( object obj )
 {
       foreach (var property in obj.GetType().GetProperties())
       {
            var attribute = property.GetCustomAttributes(typeof(ValidationAttribute), false);
            var validator = ValidationFactory.GetValidator( attribute );
            validator.Validate( property.GetValue( obj, null ) );
       }
 }

다른 팁

HTML 양식 (Win Form)의 제출 (저장)에서 변경된 고객 클래스를 되 찾을 수 있습니다. 각 속성에 대해 사용자 정의 속성 (ValidationAttribute 또는 Ivaliador 인터페이스를 구현하거나 이와 유사한 구현)이 있는지 확인합니다. 해당 속성에 대해 속성 값에 대한 Validate Method of Attribute (적절한 유효성 검사 클래스 작성 및 호출 유효성 검사 메소드)를 호출합니다.

반사를 사용합니다.

public class MyClass
{
     [Description("I'm an attribute!")]
     public int MyField;

     public Attribute GetAttribute(string fieldName)
     {
          FieldInfo field = typeof(MyClass).GetField("MyField");
          Attribute[] attributes = (Attribute[])field.GetCustomAttributes(typeof(Attribute), false);

          DescriptionAttribute desc = (DescriptionAttribute)attributes[0];
          return desc;
     }
}

귀속 된 멤버가 필드 인 경우 FieldInfo, 예제에 사용 된대로. 재산이라면 사용할 것입니다 PropertyInfo, 회원 FieldInfo 그리고 PropertyInfo 거의 동일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top