Пример #1
0
            public void Handle(object sender, object message, bool trace)
            {
                if (ReferenceEquals(_target, sender))
                {
                    return;
                }
                var messageSenderCache = new MessageSenderCache(sender, message);

                lock (_handledMessages)
                {
                    if (MessageSenderCacheComparer.Instance.Equals(_lastMessage, messageSenderCache) ||
                        !_handledMessages.Add(messageSenderCache))
                    {
                        return;
                    }
                    _lastMessage = messageSenderCache;
                }
                try
                {
                    if (_handlers == null)
                    {
                        _handler.Handle(sender, message);
                        if (trace)
                        {
                            Trace(sender, message, _target);
                        }
                    }
                    else
                    {
                        var list = FilterHandlers(message.GetType());
                        for (int index = 0; index < list.Length; index++)
                        {
                            list[index].Invoke(_target, new[] { sender, message });
                            if (trace)
                            {
                                Trace(sender, message, _target);
                            }
                        }
                    }
                }
                finally
                {
                    lock (_handledMessages)
                    {
                        _handledMessages.Remove(messageSenderCache);
                        _lastMessage = default(MessageSenderCache);
                    }
                }
            }
Пример #2
0
        static EventAggregator()
        {
            var subscriber = new ActionSubscriber <object>((o, o1) => { });

            EmptyMessage = new MessageSenderCache(subscriber, subscriber, subscriber, 0);
        }