/// <summary>
        /// Removes receiver from the list of receivers.
        /// </summary>
        /// <param name="receiver"></param>
        public static void RemoveReceiver(IEventMessageReceiver receiver)
        {
            var receiverMessageType = GetRecieverMessageType(receiver);

            if (receivers.ContainsKey(receiverMessageType) && receivers[receiverMessageType] != null)
            {
                receivers[receiverMessageType].Remove(receiver);
            }
        }
        /// <summary>
        /// Adds receiver to the list of receivers.
        /// </summary>
        /// <param name="receiver"></param>
        public static void AddReceiver(IEventMessageReceiver receiver)
        {
            var receiverMessageType = GetRecieverMessageType(receiver);

            if (!receivers.ContainsKey(receiverMessageType))
            {
                receivers.Add(receiverMessageType, new HashSet <IEventMessageReceiver>());
            }
            receivers[receiverMessageType].Add(receiver);
        }
        private static Type GetRecieverMessageType(IEventMessageReceiver receiver)
        {
            var recieverType = receiver.GetType().BaseType;

            if (recieverType != null)
            {
                var genArgs = recieverType.GetGenericArguments();
                if (genArgs.Length > 0)
                {
                    return(genArgs[0]);
                }
            }
            Debug.LogError("Can't find base MessageReceiver for this type");
            return(null);
        }