modules/Downloader/DownloaderFactory.psm1

using module '..\Enums.psm1'
using module '..\SessionConfig.psm1'
using module '.\DownloaderBase.psm1'
using module '.\RedashSimple\RedashSimpleDownloader.psm1'
using module '.\RedashMultipart\RedashMultipartDownloader.psm1'

class DownloaderFactory {
    static [Downloader] $current

    #Create an instance
    static [void] Init([SessionConfig] $config) {
        $type = $config.downloader.type
        [DownloaderFactory]::current = (New-Object -TypeName "$type" -ArgumentList @($config))
    }
}