public void RemoveHandler(Type messageType, Type handlerType) { var baseHandlerTypes = MessageHandlerExtensions.GetBaseHandlerTypes(handlerType); foreach (var baseHandlerType in baseHandlerTypes) { var messageType1 = baseHandlerType.GenericTypeArguments.Single(); if (messageType != messageType1) { continue; } if (!_handlerDict.TryGetValue(messageType, out var handlers)) { continue; } if (handlers.All(handlerWrapper => handlerWrapper.BaseHandlerType != baseHandlerType)) { continue; } handlers = handlers.Where(x => x.BaseHandlerType != baseHandlerType).ToList(); if (handlers.Count != 0) { continue; } _handlerDict.Remove(messageType); var eventName = MessageNameAttribute.GetNameOrDefault(messageType); if (_messageTypeMappingDict.ContainsKey(eventName)) { _messageTypeMappingDict.Remove(eventName); } OnEventRemoved?.Invoke(this, messageType); } }
private void RegisterMessageTypeMapping(Type messageType) { var eventName = MessageNameAttribute.GetNameOrDefault(messageType); if (!_messageTypeMappingDict.ContainsKey(eventName)) { _messageTypeMappingDict.Add(eventName, messageType); } }
public MessageHandlerWrapper( IServiceScopeFactory serviceScopeFactory, Type handlerType) { _serviceScopeFactory = serviceScopeFactory; MessageName = MessageNameAttribute.GetNameOrDefault(typeof(TMessage)); MessageType = typeof(TMessage); HandlerType = handlerType; HandlerPriority = MessageHandlerPriorityAttribute.GetPriority(typeof(TMessage), handlerType); if (MessageHandlerLifetimeAttribute.GetHandlerLifetime(handlerType) == MessageHandlerLifetime.Singleton) { _handler = GetIocMessageHandler(); } }
public void AddHandler(Type messageType, Type handlerType) { if (_messageHandlerWrappers.Any(handlerWrapper => handlerWrapper.MessageType == messageType && handlerWrapper.HandlerType == handlerType)) { throw new ArgumentException( $"Handler Type {handlerType.Name} already registered for '{messageType.Name}'"); } var messageName = MessageNameAttribute.GetNameOrDefault(messageType); if (_messageHandlerWrappers.Any(handlerWrapper => handlerWrapper.MessageName == messageName && handlerWrapper.MessageType != messageType)) { throw new ArgumentException( $"The message name '{messageName}' corresponding to the message type '{messageType}' already exists"); } var handlerWrapperType = typeof(MessageHandlerWrapper <>).MakeGenericType(messageType); _messageHandlerWrappers.Add(Activator.CreateInstance(handlerWrapperType, _serviceScopeFactory, handlerType) as IMessageHandlerWrapper); }