public void Dispose()
        {
            _window?.Close();
            _window = null;

            _lifetimeSupervisor.ShowNotificationRequested  -= LifetimeSupervisorOnShowNotificationRequested;
            _lifetimeSupervisor.CloseNotificationRequested -= LifetimeSupervisorOnCloseNotificationRequested;

            _positionProvider.UpdatePositionRequested       -= PositionProviderOnUpdatePositionRequested;
            _positionProvider.UpdateEjectDirectionRequested -= PositionProviderOnUpdateEjectDirectionRequested;
            _positionProvider.UpdateHeightRequested         -= PositionProviderOnUpdateHeightRequested;

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

            if (disposing)
            {
                _window?.Close();
                _window = null;

                _lifetimeSupervisor.ShowNotificationRequested  -= LifetimeSupervisorOnShowNotificationRequested;
                _lifetimeSupervisor.CloseNotificationRequested -= LifetimeSupervisorOnCloseNotificationRequested;

                _positionProvider.UpdatePositionRequested       -= PositionProviderOnUpdatePositionRequested;
                _positionProvider.UpdateEjectDirectionRequested -= PositionProviderOnUpdateEjectDirectionRequested;
                _positionProvider.UpdateHeightRequested         -= PositionProviderOnUpdateHeightRequested;

                _lifetimeSupervisor = null;
            }

            _disposed = true;
        }