2010-04-17 2 views
0

클래스에 INotifyPropertyChanged를 구현 한 Aspect가 있습니다. 나는 일반적으로 클래스의 인스턴스를,하지만 난 DataContractSerializer를 사용하여 클래스를 직렬화 때 문제로 실행하면PostSharp에서 DataContractSerializer를 사용할 때?

[OnLocationSetValueAdvice, MethodPointcut("SelectProperties")] 
    public void OnPropertySet(LocationInterceptionArgs args) 
    { 
     var currentValue = args.GetCurrentValue(); 
     bool alreadyEqual = (currentValue == args.Value); 

     // Call the setter 
     args.ProceedSetValue(); 

     // Invoke method OnPropertyChanged (ours, the base one, or the overridden one). 
     if (!alreadyEqual) 
      OnPropertyChangedMethod.Invoke(args.Location.Name); 
    } 

이 잘 작동 : 가로 세로는 다음을 포함합니다. 이것은 생성자를 우회하여 PostSharp가 스스로를 설정하는 방식을 방해합니다. 이로 인해 차단 된 속성 설정자에서 NullReferenceException이 발생하지만 사용자 지정 OnPropertySet을 호출하기 전에 LocationInterceptionArgs를 설정하는 데 방해가 될 것으로 예상됩니다.

이 문제가 발생한 사람이 있습니까? 내가 해결할 수있는 방법이 있습니까?


가 좀 더 많은 연구를했고, 내가이 일을하여 문제를 해결할 수 있습니다 발견 :

내가 좋아, 즉, 너무 나쁘지 않다 생각 그래서 내 화면에서이 작업을 수행하려고
[OnDeserializing] 
    private void OnDeserializing(StreamingContext context) 
    { 
     AspectUtilities.InitializeCurrentAspects(); 
    } 

:

불행히도, 방법을 제대로 가로 채지 만 작동하지 않습니다. InitializeCurrentAspects에 대한 호출이 aspect 변환 된 클래스 내부에있는 것이 아니라 Aspect 내부에 있기 때문에 제대로 변환되지 않았다고 생각합니다. 깨끗하게 자동화 할 수있는 방법이 있나요? 그렇기 때문에 Aspect를 갖고 싶은 모든 수업에서 이것을 호출하는 것에 대해 걱정할 필요가 없습니까?

답변