/// <summary>
        /// Releases all managed resources.
        /// </summary>
        /// <param name="calledFromFinalizer">Specifies if this method is called from finalizer or not</param>
        private void Dispose(bool calledFromFinalizer)
        {
            if (!_isDisposed)
            {
                OnDisposing(new EventArgs());

                _isDisposed = true;

                _hosts.Remove(this);

                StopListening();

                if (_dispatcher != null)
                {
                    _dispatcher = null;
                }

                if (_sessionManager != null)
                {
                    _sessionManager.Dispose();
                    _sessionManager = null;
                }
                if (this.Authenticate != null)
                {
                    this.Authenticate = null;
                }

                if (_authProvider != null)
                {
                    _authProvider = null;
                }

                if (_catalog != null)
                {
                    if (_catalog.DisposeWithHost)
                    {
                        _catalog.Dispose();
                    }

                    _catalog = null;
                }

                if (!calledFromFinalizer)
                {
                    GC.SuppressFinalize(this);
                }
            }
        }