protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            if (disposing)
            {
                foreach (Node node in _nodes)
                {
                    RemoveHandlers(node);
                }

                _nodes.Clear();
            }

            _disposed = true;
        }