public void Add(ActionMessageFilter filter, TFilterData data)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(filter));
            }

            _filters.Add(filter, data);
            if (filter.Actions.Count == 0)
            {
                _always.Add(filter);
            }
            else
            {
                for (int i = 0; i < filter.Actions.Count; ++i)
                {
                    if (!_actions.TryGetValue(filter.Actions[i], out List <MessageFilter> filters))
                    {
                        filters = new List <MessageFilter>();
                        _actions.Add(filter.Actions[i], filters);
                    }
                    filters.Add(filter);
                }
            }
        }
        public bool Remove(ActionMessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(filter));
            }

            if (_filters.Remove(filter))
            {
                if (filter.Actions.Count == 0)
                {
                    _always.Remove(filter);
                }
                else
                {
                    List <MessageFilter> filters;
                    for (int i = 0; i < filter.Actions.Count; ++i)
                    {
                        filters = _actions[filter.Actions[i]];
                        if (filters.Count == 1)
                        {
                            _actions.Remove(filter.Actions[i]);
                        }
                        else
                        {
                            filters.Remove(filter);
                        }
                    }
                }
                return(true);
            }
            return(false);
        }
        public bool Remove(MessageFilter filter)
        {
            if (filter == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("filter");
            }

            ActionMessageFilter aFilter = filter as ActionMessageFilter;

            if (aFilter != null)
            {
                return(Remove(aFilter));
            }
            return(false);
        }