public NavigationProvider([NotNull] INavigationService navigationService, [NotNull] IThreadManager threadManager,
                                  [NotNull] IViewMappingProvider mappingProvider, [NotNull] IViewManager viewManager,
                                  [NotNull] IViewModelProvider viewModelProvider, IOperationCallbackManager callbackManager, INavigationCachePolicy cachePolicy = null)
        {
            Should.NotBeNull(navigationService, "navigationService");
            Should.NotBeNull(threadManager, "threadManager");
            Should.NotBeNull(mappingProvider, "mappingProvider");
            Should.NotBeNull(viewManager, "viewManager");
            Should.NotBeNull(viewModelProvider, "viewModelProvider");
            Should.NotBeNull(callbackManager, "callbackManager");
            _navigationService     = navigationService;
            _threadManager         = threadManager;
            _mappingProvider       = mappingProvider;
            _viewManager           = viewManager;
            _viewModelProvider     = viewModelProvider;
            _callbackManager       = callbackManager;
            _cachePolicy           = cachePolicy;
            _vmReference           = Empty.WeakReference;
            _closeViewModelHandler = CloseableViewModelOnClosed;

            NavigationService.Navigating += NavigationServiceOnNavigating;
            NavigationService.Navigated  += NavigationServiceOnNavigated;
        }
        /// <summary>
        ///     Initializes a new instance of the <see cref="NavigationProvider" /> class.
        /// </summary>
        public NavigationProvider([NotNull] INavigationService navigationService, [NotNull] IThreadManager threadManager,
            [NotNull] IViewMappingProvider mappingProvider, [NotNull] IViewManager viewManager,
            [NotNull] IViewModelProvider viewModelProvider, IOperationCallbackManager callbackManager, INavigationCachePolicy cachePolicy = null)
        {
            Should.NotBeNull(navigationService, "navigationService");
            Should.NotBeNull(threadManager, "threadManager");
            Should.NotBeNull(mappingProvider, "mappingProvider");
            Should.NotBeNull(viewManager, "viewManager");
            Should.NotBeNull(viewModelProvider, "viewModelProvider");
            Should.NotBeNull(callbackManager, "callbackManager");
            _navigationService = navigationService;
            _threadManager = threadManager;
            _mappingProvider = mappingProvider;
            _viewManager = viewManager;
            _viewModelProvider = viewModelProvider;
            _callbackManager = callbackManager;
            _cachePolicy = cachePolicy;
            _vmReference = Empty.WeakReference;
            _closeViewModelHandler = CloseableViewModelOnClosed;

            NavigationService.Navigating += NavigationServiceOnNavigating;
            NavigationService.Navigated += NavigationServiceOnNavigated;
        }