public void RegisterReactor <T>(IReactor <T> reactor) where T : IEvent { Type eventType = typeof(T); if (!reactorCallbacks.ContainsKey(eventType)) { reactorCallbacks.Add(eventType, new List <Func <IEvent, Task> >()); } Func <IEvent, Task> delegateFunction = async(IEvent evt) => await reactor.OnAsync((T)evt); reactorCallbacks[eventType].Add(delegateFunction); }