public System.Net.WebRequest Create(Uri uri)
        {
            var providerUri = new StorageUri(uri);
            var provider    = this.GetProviderByUri(providerUri);


            // Pipeline: Backup => Cache => Basic Provider

            if (_configService.PluginConfiguration.IsOfflineCacheEnabled)
            {
                provider = _cacheManagerService.WrapInCacheProvider(provider, uri);
            }

            if (_configService.PluginConfiguration.IsBackupToLocalEnabled ||
                _configService.PluginConfiguration.IsBackupToRemoteEnabled)
            {
                provider = BackupProvider.WrapInBackupProvider(provider, providerUri, _configService);
            }

            var itemPath = providerUri.GetPath();

            return(new KeeAnywhereWebRequest(provider, itemPath));
        }