2012-09-21 3 views
2

유형, IHandle 를 IEnumerable <T> 동일 ICollection은 내가 우리의 응용 프로그램에 대한 작은 술집/서브 시스템을 작성한 체크

구현하여 메시지에 가입

는 가입자가 IHandle<IEnumerable<MyType>>

그런 사람을 구현 말할 수 있습니다 ICollection<MyType>> 메시지를 게시하십시오. IColletion <>가 <>

인 IColletion 이후 가입자를 트리거해야합니다.3210

그러나 내 코드는이를 지원하지 않습니다. 해결 방법은 게시자가 ICollection을 IEnumerable로 캐스팅하지만 큰 팀에서는 버그가 발생하기 쉽도록하는 것입니다.

public void Publish<T>(T message) where T : class 
{ 
    if (config.EnableEventAggregator) 
     subscribers.OfType<IHandle<T>>() 
     .ForEach(s => s.Handle(message)); 
} 

작동하지 않는 코드 나는 그것이 IEnumerable<T> 어떤 아이디어를 상속하는 모든 유형의 IHandle<IEnumerable>을 찾으려는? 이

이를 IEnumerable을

에서 상속 모든 유형을 받아 들일 것입니다

interface IHandle<in T> 

을이 방법으로 : 당신이 해결할 필요가 없도록

+2

Cuong Le가 맞습니다. 또한 1) 메소드의 본문은'return subscribers.OfType >();', 2) 질문이 리플렉션과 관련이 없으므로 태그를 제거 할 것입니다. – thorn

+0

그것의 대답을 만들었습니다 – Anders

답변

3

당신은 콘트라 변형IHandle을 정의해야합니다 link에 대한 설명이 자세히 나와 있습니다. 공분산 및 반공 변이가 genric과 어떻게 작용하는지 설명합니다.

+0

반동, doh, offcourse, 고마워! – Anders