public async Task HandleAsync(T command, CancellationToken cancellationToken)
        {
            var key = _keyGenerator.GenerateKeyForCache(command);

            if (string.IsNullOrEmpty(key))
            {
                await _decoratee.HandleAsync(command, cancellationToken);
            }
            else
            {
                var exist = await cacheProvider.ExistAsync(key);

                if (exist)
                {
                    var result = await cacheProvider.GetAsync <TResult>(key);

                    if (result != null)
                    {
                        command.Result = result;
                    }
                }
                else
                {
                    await _decoratee.HandleAsync(command, cancellationToken);

                    await cacheProvider.AddAsync(key, command.Result);
                }
            }
        }
        public async Task HandleAsync(T command, CancellationToken cancellationToken)
        {
            var key = _keyGenerator.GenerateKeyForCache(command);
            if (string.IsNullOrEmpty(key))
            {
                await _decoratee.HandleAsync(command, cancellationToken);
                return;
            }
            var result = await cacheProvider.GetAsync(key);
            //if (result != null)
            //    ((IHaveResult)command).Result = result;
            //else
            //{
                await _decoratee.HandleAsync(command, cancellationToken);
            //    await cacheProvider.AddAsync(key, ((IHaveResult)command).Result);

            //}
        }