2016-12-28 3 views
3

여기에있는 문제를 해결하기 위해 ImpromptuInterface을 사용하려고합니다. Adding Interface Implementation to ExpandoObject.'ExpandoObject'에 'PropertyChanged'에 대한 정의가 없습니다.

내 기본 클래스에서 내 인터페이스의 다양한 속성에 액세스 할 수 있지만 더 이상 ExpandoObject의 PropertyChanged 이벤트를 구독 할 수 없습니다.

문제 해결 중에 문제를 단순화 할 수있었습니다.

Service.cs

using ImpromptuInterface; 

public Service() 
{ 
    InitializeComponent(); 

    dynamic expando = new ExpandoObject(); 

    try 
    { 
     INotifyPropertyChanged obj = Impromptu.ActLike(expando); 

     obj.PropertyChanged += obj_PropertyChanged; 
    } 
    catch (Exception ex) 
    { 
     EventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error); 
    } 

    try 
    { 
     INotifyPropertyChanged obj = Impromptu.ActLike<INotifyPropertyChanged>(expando); 

     obj.PropertyChanged += obj_PropertyChanged; 
    } 
    catch (Exception ex) 
    { 
     EventLog.WriteEntry(ex.ToString(), EventLogEntryType.Error); 
    } 
} 

private void obj_PropertyChanged(object sender, PropertyChangedEventArgs e) 
{ 
    throw new NotImplementedException(); 
} 

내가

'System.Dynamic.ExpandoObject가' '하여 PropertyChanged'

에 대한 정의를 포함하지 않는다는 오류가 발생

생성자에서 이벤트 처리기를 연결하려고 할 때마다 발생합니다.

이벤트 로그 1

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Dynamic.ExpandoObject' does not contain a definition for 'PropertyChanged' 
    at CallSite.Target(Closure , CallSite , Object) 
    at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0) 
    at ActLike_INotifyPropertyChanged_dc51b6c65bf147d0b5f35218102e3c11.add_PropertyChanged(PropertyChangedEventHandler value) 
    at Service..ctor() 

이벤트 로그 2

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'System.Dynamic.ExpandoObject' does not contain a definition for 'PropertyChanged' 
    at CallSite.Target(Closure , CallSite , Object) 
    at ActLike_INotifyPropertyChanged_dc51b6c65bf147d0b5f35218102e3c11.add_PropertyChanged(PropertyChangedEventHandler value) 
    at Service..ctor() 

내가 ImpromptuInterface이 방법을 사용할 수 없습니다 있습니까?

+0

내가 연주 한 몇 분 전부터 'ImpromptuInterface'버그가있는 것 같습니다. 나는 [버그를보고한다] (https://github.com/ekonbenefits/impromptu-interface/issues) –

답변

0

ImpromptuInterface은 DLR을 사용하며 DLR은 명시 적 인터페이스 호출로 작동하지 않습니다. 이것은 확장 기능에서 구현 된 방법입니다. 프록시의 대상이 정확한 인터페이스를 구현하는지 확인하기 위해 일반적으로 해결할 수 있습니다. 즉흥적 인 인터페이스는 줄 바꿈입니다. 나는 그것에 대해 더 생각해야 할 것이다. 이 issue으로 추적 중입니다.

이 특정 문제에 대한 해결 방법으로 Dynamitey.Dynamic.Dictionary : BaseDictionary은 expando와 동일하게 작동하며 일반 이벤트 속성으로 PropertyChanged를가집니다.

관련 문제