2013-07-18 4 views
-1

나는 다음과 같은 클래스 (그들 중 일부는 PRISM 프레임 워크에 변경할 수 없습니다)이 있습니다일반 형식 변환

public abstract class NetworkEventBase<T> : CompositePresentationEvent<T> where T : NetworkEventPayload { } 
public class NetworkEventPayload { } 
public class TestEvent : NetworkEventBase<TestPayload> { } 
public class TestPayload : NetworkEventPayload { } 

// the following classes are PRISM classes: 
public class CompositePresentationEvent<TPayload> : EventBase { } 
public abstract class EventBase { } 

지금 나는 그것의 기본 클래스 NetworkEventBase에 TestEvent의 인스턴스를 변환 할 필요를 IEventAggregator의 데코레이터 내부 aggregatedEvent의 실행시의 형태가 TestEvent 경우에도,

public class MessageBusAdapterInjectorDecorator : IEventAggregator { 
    ... 

    public TEventType GetEvent<TEventType>() where TEventType : EventBase, new() 
    { 
     var aggregatedEvent = this.eventAggregator.GetEvent<TEventType>(); 
     var networkEvent = aggregatedEvent as NetworkEventBase<NetworkEventPayload>; 

     if (networkEvent != null) 
     { 
      networkEvent.MessageBusAdapter = this.messageBusAdapter; 
     } 

     return aggregatedEvent; 
    } 
} 

그러나, networkEvent 항상 널 :
public interface IEventAggregator 
{ 
    TEventType GetEvent<TEventType>() where TEventType : EventBase, new(); 
} 

지금 내 장식에이 같은 변환하려고 : 같은 IEventAggregator 보인다.

+0

샘플을 편집하여 'networkEvent'의 출처가 명확하도록하십시오. –

+1

NSA는 PRISM을위한 프레임 워크를 공개 했습니까? scnr – JeffRSon

답변

1

당신은 클래스가라는 NetworkEventBase<T>T에 공변 될 수 있기를 바랍니다 보인다. 그러나 제네릭 클래스는 C#에서 공통 변수가 될 수 없습니다.

이 문제에 대한 다른 스레드를 참조하십시오.

+0

감사합니다. IMessageBusAdapter를 이벤트에 삽입하는 메서드를 정의하는 인터페이스를 만들었습니다. – cguedel