private void DoAddSubscriber( Type handlerType, Type messageType, string messageName, bool isDynamic) { Assert.NotNull(handlerType, nameof(handlerType)); Assert.NotNullOrEmpty(messageName, nameof(messageName)); if (!_subscribers.ContainsKey(messageName)) { _subscribers.Add(messageName, _subscriberCollection.New()); } if (_subscribers[messageName].Any(s => s.MessageHandlerType == handlerType)) { throw new ArgumentException( $"Handler Type {handlerType.Name} already registered for '{messageName}'", nameof(handlerType)); } if (isDynamic) { _subscribers[messageName].Add(MessageSubscriberDescriptor.Dynamic(messageName, handlerType)); } else { Assert.NotNull(messageType, nameof(messageType)); _subscribers[messageName].Add(MessageSubscriberDescriptor.Typed(messageType, handlerType)); } }
public void Unsubscribe <TMessage, TMessageHandler>() where TMessage : IMessage where TMessageHandler : IMessageHandler <TMessage> { DoRemoveSubcriber(GetMessageName <TMessage>(), MessageSubscriberDescriptor.Typed(typeof(TMessage), typeof(TMessageHandler))); }