我已經寫了一個小的pub/sub系統爲我們的應用程序,IEnumerable的<T>等於ICollection的<T>類型檢查
你通過實施IHandle
訂閱的消息可以說讓用戶實現IHandle<IEnumerable<MyType>>
然後有人發佈類型爲ICollection<MyType>>
的消息,因爲IColletion是類型IEnumerable,所以這應該會引發訂閱者,因爲它是類型IEnumerable <>
但我的代碼不支持這一點,解決方法是發佈者將ICollection投入到IEnumerable中,但它容易出現大型團隊中的錯誤。
這是行不通
public void Publish<T>(T message) where T : class
{
if (config.EnableEventAggregator)
subscribers.OfType<IHandle<T>>()
.ForEach(s => s.Handle(message));
}
的代碼,我希望它找到IHandle<IEnumerable>
爲繼承IEnumerable<T>
任何想法各類?
Cuong Le是正確的。還有1)你的方法的主體可能被替換爲以下行:'return subscribers.OfType>();',2)這些問題與反射無關,所以我要去除標記。 –
thorn
作出了一個答案它 – Anders