2010-03-02 4 views
2

코드를 디버깅하는 중 하나 이상한 일이 발생합니다. MyProperty라는 문자열 속성이 있습니다. 속성의 setter 및 기본 생성자 (유일한 생성자)에 중단 점을 추가하면 setter가 먼저 호출됩니다. 나는 코드의 다른 레벨에서 어떤 일이 일어나는지 알지 못하지만, 어쨌든 이것은 나에게 이상한 것처럼 보인다. 모든 구성원은 정적이지 않습니다. 클래스에는 [DataContract] 특성이 있고 멤버는 [DataMember]입니다. 아무도 이것을 설명 할 수 있습니까?setter가 생성자보다 먼저 호출됩니다.

이보다 더 많은 코드를 공유 할 수 없습니다. 또한 코드는 Silverlight 프로젝트에 있습니다.

+0

생성자가 전혀 호출되지 않았습니까? –

+1

코드를 전혀 공유하지 않습니다. ;)하지만 나에게 이것은 인스턴스를 생성하기 전에 클래스를 사용하려고하는 것처럼 들린다. – Bobby

+4

문제를 보여주는 작은 프로그램을 작성하십시오. 그것은 아마도 당신이 생각하는 곳이 아닌 곳입니다. 지금 이건 진짜 질문이 아닙니다. –

답변

5

WCF 역 직렬화 중에 있습니까? WCF deserialization에서 생성자는 전혀 호출되지 않습니다. 그건 의도적으로입니다. WCF 개체는 데이터 전송 개체로 설계되었으며 설정자와 게터 뒤에있는 모든 논리는 기껏해야 위험합니다. 세터에 상주하는 비즈니스 로직에서 어떤 일이 벌어지기 때문에이 행동을보고 염려 할 가능성이 있습니다. 이 문제를 해결하려면 [DataMember] 특성이있는 자동 속성 및 필드 만 지정하면 다른 논리가 트리거되지 않습니다. 또한 생성자에서 수행 될 논리에주의하십시오. 논리가 직렬화 해제 중에 실행되지 않습니다.

+2

와우! 그건 놀랍습니다. 그것에 대한 참고 자료가 있습니까? 직렬화 스키마가 생성자를 호출하지 않고 mutator 메서드를 통해 속성 값을 할당하는 방법을 상상할 수 없습니다. – AnthonyWJones

+0

예, 우리는 WCF 서비스를 사용하고 있기 때문에 WCF 직렬화를 사용하고 있습니다. – Tanmoy

+0

다음 블로그와 같은 설정 도구에 유효성 검증 로직을 추가합니다. http://msmvps.com/blogs/theproblemsolver/archive/2008/12/30/data-validation-silverlight-versus-wpf-part-2.aspx 이 이유 때문에 setter 내부에서 _errors null 예외가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? – Tanmoy

관련 문제