public static async Task <T> OpenAsyncQuery <T>(this IScreenOpener opener, IQuery <T> query, CancellationToken cancelToken = default(CancellationToken))
            where T : class, IScreenViewModel
        {
            var viewModel = await opener.Send(query, cancelToken).ConfigureAwait(false);

            await opener.OpenAsync(viewModel).ConfigureAwait(false);

            return(viewModel);
        }
        public static async Task <T> OpenAsyncQueryCached <T>(this IScreenOpener opener, IQuery <T> query)
            where T : class, IScreenViewModel
        {
            var t = typeof(T);

            if (cached.ContainsKey(t))
            {
                var vm = cached[t];
                if (vm.IsOpen)
                {
                    await vm.Activate.ExecuteAsyncTask().ConfigureAwait(false);

                    return((T)vm);
                }
            }
            var viewModel = await opener.Send(query).ConfigureAwait(false);

            cached.Add(t, viewModel);
            await opener.OpenAsync(viewModel).ConfigureAwait(false);

            HandleClosing(viewModel, t);
            return(viewModel);
        }