2012-04-27 3 views
0

나는 검증 속성으로 주석 된 속성을 가지고 있습니다. 속성의 Setter가 특성의 IsValid 메서드보다 먼저 호출되는 이유는 무엇입니까? 더 중요한 것은 값을 설정하기 전에 유효성을 검사하는 방법입니다.ValidationAttribute.IsValid가 나중에 예상보다 늦게 호출되는 이유는 무엇입니까?

[MyAttribute] 
public string MyProperty 
{ 
    get { ... } 
    set { ... } 
} 
+0

, 나는 세터가 귀하의 속성을 실행하기 호출해야합니다 생각합니다. –

답변

1

난 당신이 얘기하는 가정

여기
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)] 
public class MyAttribute: ValidationAttribute 
{  
    public override bool IsValid(object value) 
    { 
     ... 
    } 
} 

는 속성이 속성에 사용되는 방법 : 여기

처럼 발리 속성이 어떻게 보이는지 볼 수있는 스케치 코드 모델입니다 DataAnnotations 네임 스페이스 내의 ValidationAttribute에 대해? 이러한 특성은 에 일반적으로에 명시된 특정 모델없이 유효성 검사 요구 사항을 설명하는 데 사용됩니다.

그러나, 많은 경우에, 그것은 개체에 대한 감각을 만들거나 구성하는 개체로 설정 한 다음 호출은 "이 유효한 지금인가?"물어 만들 수에 대한 - 물론, 그런 경우에, 당신의 IsValid 메쏘드에 대한 호출은 그 프로퍼티의 값이 설정된 후에 잘 일어날 것입니다.

속성은 일반적으로 수동적 - 뭔가 같은 시간이 실제로 프로그래밍 방식으로 속성을 액세스하고 그것으로 무언가를 할 때까지, 속성 내에서 코드 중 어느 것도 실행되지 않습니다. "이 속성이 연결된 구성원이 호출 될 때 먼저이 코드를 실행하십시오"라는 속성을 작성하는 일반적인 방법은 없습니다. 속성이 세트에 해결 및 방법을 얻을 수 있기 때문에

관련 문제