public void Publish(MessengerMessage message, Type messageType) { if (message == null) { throw new ArgumentNullException(nameof(message)); } List <BaseSubscription> toNotify = null; lock (this) { /* * MvxTrace.Trace("Found {0} subscriptions of all types", _subscriptions.Count); * foreach (var t in _subscriptions.Keys) * { * MvxTrace.Trace("Found subscriptions for {0}", t.Name); * } */ Dictionary <Guid, BaseSubscription> messageSubscriptions; if (_subscriptions.TryGetValue(messageType, out messageSubscriptions)) { //MvxTrace.Trace("Found {0} messages of type {1}", messageSubscriptions.Values.Count, typeof(TMessage).Name); toNotify = messageSubscriptions.Values.ToList(); } } if (toNotify == null || toNotify.Count == 0) { //Console.WriteLine("Nothing registered for messages of type {0}", messageType.Name); return; } var allSucceeded = true; foreach (var subscription in toNotify) { allSucceeded &= subscription.Invoke(message); } if (!allSucceeded) { //Console.WriteLine("One or more listeners failed - purge scheduled"); SchedulePurge(messageType); } }
public void Publish(MessengerMessage message) { Publish(message, message.GetType()); }