Пример #1
0
        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);
        }
Пример #2
0
 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);
     }
 }
Пример #3
0
 protected void ExecuteHandler <T>(IMediatorMessageHandler handler, T message) where T : IMessageBase
 {
     ((IMediatorMessageHandler <T>)handler)?.Handle(message);
 }