public virtual IMediator Subscribe <T>(IMediatorMessageHandler <T> handler) where T : IMessageBase { var eventType = typeof(T); Lock.EnterUpgradeableReadLock(); try { List <IMediatorMessageHandler> handlers; if (!Handlers.TryGetValue(eventType, out handlers)) { Lock.EnterWriteLock(); try { Handlers.Add(eventType, new List <IMediatorMessageHandler> { handler }); } finally { Lock.ExitWriteLock(); } } else if (handlers.All(x => x != handler)) { Lock.EnterWriteLock(); try { handlers.Add(handler); } finally { Lock.ExitWriteLock(); } } } finally { Lock.EnterUpgradeableReadLock(); } return(this); }
protected void ExecuteHandler <T>(IMediatorMessageHandler handler, T message) where T : IMessageBase { if (handler == null || message == null) { return; //TODO: Add logging logic } try { ((IMediatorMessageHandler <T>)handler)?.Handle(message); } catch (Exception ex) { var exceptionString = ex.ToString(); Console.WriteLine(exceptionString); } }
protected void ExecuteHandler <T>(IMediatorMessageHandler handler, T message) where T : IMessageBase { ((IMediatorMessageHandler <T>)handler)?.Handle(message); }