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); } }
public void AddHandler(Type messageType, Type handlerType) { var baseHandlerTypes = MessageHandlerExtensions.GetBaseHandlerTypes(handlerType); foreach (var baseHandlerType in baseHandlerTypes) { var messageType1 = baseHandlerType.GenericTypeArguments.Single(); if (messageType != messageType1) { continue; } RegisterMessageHandlerWrapper(messageType, handlerType, baseHandlerType); RegisterMessageTypeMapping(messageType); } }