2
爲什麼不能正常工作?奇數通用約束問題
public interface IBus
{
void Subscribe<T>(ISubscribe<T> subscriber) where T : class, IEvent;
void Send<T>(IEvent @event) where T : class, IEvent;
}
class InMemoryEventBus : IBus
{
private readonly IDictionary<ISubscribe<IEvent>, Type> _subscribers;
public InMemoryEventBus()
{
_subscribers= new Dictionary<ISubscribe<IEvent>, Type>();
}
public void Subscribe<T>(ISubscribe<T> subscriber) where T : class, IEvent
{
_subscribers.Add(subscriber, typeof(T));
}
public void Send<T>(IEvent @event) where T : class, IEvent
{
foreach (var subscriber in _subscribers.Where(subscriber => subscriber.Value == typeof(T)))
{
subscriber.Key.Handle(@event);
}
}
}
public interface IEvent
{
Guid EventId { get; set; }
}
public interface ISubscribe<T> where T : IEvent
{
void Handle(T @event);
}
public class StockLevelDroppedBellowMinimumLevelEvent : IEvent
{
public Guid EventId { get; set; }
public string Message { get; set; }
}
我得到:
cannot convert from 'IHandle<T>' to 'IHandle<IEvent>'
如果我加入了協變到IEVent它去猿市 任何指針? – iwayneo 2012-08-09 16:50:20
@iwayneo:道歉,它是'ISubscribe',它需要協變 - 編輯。 – 2012-08-09 16:54:08
但是然後我得到無效方差:類型參數'T'必須是衝突有效 – iwayneo 2012-08-09 16:55:35