2010-04-20 2 views
1

나는 노출하고자하는 기본 클래스에 대한 래퍼 역할을하는 데이터 계약 집합을 가지고 있습니다. 빠른 예는 다음과 같습니다Datacontracts 두 번 실행되는 속성 가져 오기 도구

[DataMember] 
public List<decimal> Points 
{ 
    get 
    { 
     return sourceObject.ListPoints(); 
    } 

    private set{} 
} 

우리는 우리가 (우리가 객체 그래프를 변환 순환 참조 방지 할 필요가있다) 먼저 데이터를 마사지해야 할 몇 가지 다른 특성을 가지고있다.

우리가 보게되는 문제는이 getter가 서비스 작업 내에서 한번, 두 번 연속적으로 실행된다는 것입니다. 이로 인해 두 가지 문제가 발생합니다.

  1. 수동으로 컬렉션에 추가합니다. 컬렉션이 두 번 실행되기 때문에 컬렉션이 중복으로 채워집니다.
  2. 두 번째 실행 중에 예외가 발생하면 작업의 try/catch 외부에서 예외가 발생하고 오류가 발생하지 않습니다. 이 서비스는 숨겨진 시간 초과 메시지를 발생시키고 오류를 확인하는 유일한 방법은 WCF 추적 로그를 통한 것입니다.

답변

0

단순히 값을 "캐시"할 수 있습니다.

public class MyWrapper 
{ 
    public MyWrapper(SourceObject sourceObject) 
    { 
     this.Points = sourceObject.ListPoints(); 
    } 

    [DataMember] 
    public List<decimal> Points { get; private set; } 
} 

편집 : 또는 더 느리게 :

public class MyWrapper 
{ 
    public MyWrapper(SourceObject sourceObject) 
    {    
    } 

    private List<decimal> points; 

    [DataMember] 
    public List<decimal> Points 
    { 
     get 
     { 
      if (this.points == null) 
      { 
       this.points = sourceObject.ListPoints(); 
      } 

      return this.points; 
     } 
    } 
} 
+0

레이스 조건 경고 예를 들어! –