public RemoteResourceDownloader([NotNull] string destinationFilePath, [NotNull] string destinationMetaPath,
                                        RemoteResource resource,
                                        bool useTorrents,
                                        CreateNewHttpDownloader createNewHttpDownloader,
                                        CreateNewChunkedHttpDownloader createNewChunkedHttpDownloader,
                                        CreateNewTorrentDownloader createNewTorrentDownloader)
        {
            if (destinationFilePath == null)
            {
                throw new ArgumentNullException("destinationFilePath");
            }
            if (destinationMetaPath == null)
            {
                throw new ArgumentNullException("destinationMetaPath");
            }

            _logger = PatcherLogManager.DefaultLogger;
            _destinationFilePath            = destinationFilePath;
            _destinationMetaPath            = destinationMetaPath;
            _resource                       = resource;
            _useTorrents                    = useTorrents;
            _createNewHttpDownloader        = createNewHttpDownloader;
            _createNewChunkedHttpDownloader = createNewChunkedHttpDownloader;
            _createNewTorrentDownloader     = createNewTorrentDownloader;
        }
        public RemoteResourceDownloader(string destinationFilePath, string destinationMetaPath, RemoteResource resource,
                                        bool useTorrents,
                                        CreateNewHttpDownloader createNewHttpDownloader,
                                        CreateNewChunkedHttpDownloader createNewChunkedHttpDownloader,
                                        CreateNewTorrentDownloader createNewTorrentDownloader)
        {
            Checks.ArgumentParentDirectoryExists(destinationFilePath, "destinationFilePath");
            Checks.ArgumentValidRemoteResource(resource, "resource");

            DebugLogger.LogConstructor();
            DebugLogger.LogVariable(destinationFilePath, "destinationFilePath");
            DebugLogger.LogVariable(resource, "resource");
            DebugLogger.LogVariable(useTorrents, "useTorrents");

            _destinationFilePath            = destinationFilePath;
            _destinationMetaPath            = destinationMetaPath;
            _resource                       = resource;
            _useTorrents                    = useTorrents;
            _createNewHttpDownloader        = createNewHttpDownloader;
            _createNewChunkedHttpDownloader = createNewChunkedHttpDownloader;
            _createNewTorrentDownloader     = createNewTorrentDownloader;
        }