2014-11-20 2 views
0

PostSharp NotifyPropertyChanged aspect에 문제가 있습니다. 복합 패턴으로 구현 모델 아키텍처가 있습니다. 내 문제는 PropertyChanged가 TaskGroup.PercentDone에 대해 발생하지 않는다는 것입니다.PostSharp NotifyPropertyChanged 설정 Depends.On

Tasks 속성은 List of ITask이므로 TaskGroup 또는 SimpleTask가 될 수 있습니다. SimpleTask는 PercentDone 자동 등록 정보와 PropertyChanged 이벤트를 올바르게 실행합니다.

TaskGroup.PercentDone의 경우 [SafeForDependencyAnalysis]를 사용해야합니다. 사용하지 않으면 컴파일 오류가 발생합니다. 그러나 Depends.On()을 사용하는 방법을 알아낼 수 없습니다.

나는 이러한 많은 솔루션을 시도합니다.

Depends.On(this.Tasks.Sum(task => task.PercentDone)); 

foreach (var task in this.Tasks) 
{ 
    Depends.On(task.PercentDone); 
} 

Depends.On(this.Tasks); 

그러나 나는 추측 할 수 없었다.

class TaskGroup : TaskBase, IComposite<ITaskModel> 
{ 
    [SafeForDependencyAnalysis] 
    public override int PercentDone 
    { 
     get 
     { 
      //BUG event ProperityChanges is not raised 
      int percentDone = this.Tasks.Sum(task => task.PercentDone); 
      return percentDone/this.tasks.Count; 
     } 
     set 
     { 
      foreach (var task in this.tasks) 
      { 
       task.PercentDone = value; 
      } 
     } 
    } 

    ... 

} 

최신 버전의 PostSharp 4.0.36.0을 사용합니다.

Google에서 비슷한 문제를 찾지 못했습니다.하지만 이것은 아주 일반적인 일이었습니다. 나는 인터넷 검색을 잘못하고 있습니까? 나를 올바른 방향으로 조종 해주십시오. 나는 너의 도움에 대단히 감사한다.

답변

1

현재 NotifyPropertyChangedAspectDepends.On의 속성 체인 (예 : origin.Property1.Property2) 만 지원하며 문서에 명시된 것과 유사합니다. 첫 번째 두 표현식은 표현식이 필드 또는 this으로 시작해야하고 이후에 차례로 연결된 속성 액세스 외에는 아무것도 포함되어 있지 않으므로 무시됩니다.

일반적으로 모든 "벡터"연산은 불가능합니다. 따라서 이러한 동작을 수동으로 구현해야합니다. 예를 들어 INotifyCollectionChanged 컬렉션에 등록하려고 할 수 있습니다.

PostSharp가 최소한 Depends.On을 무시하고 오류 메시지를 생성해야한다는 것은 사실입니다. 정말 멋진 기능이 될 것입니다. 앞으로 고려해 볼 수 있습니다 (our UserVoice Page에 투표하십시오).

관련 문제