public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSystemd() // Linux service lifetime management .ConfigureAppConfiguration((context, builder) => { builder .SetBasePath(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)) // Required for Linux service .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{context.HostingEnvironment.EnvironmentName}.json") .AddJsonFile("dbsettings.json") .AddJsonFile($"dbsettings.{context.HostingEnvironment.EnvironmentName}.json") .AddEnvironmentVariables() .Build(); }) .ConfigureServices((hostContext, services) => { var proxies = new List <string>(); hostContext.Configuration.GetSection("TPBProxies").Bind(proxies); if (proxies.Count == 0) { throw new Exception("TPB Proxies configuration missing"); } TPBProxies.SetProxies(proxies.ToArray()); var downloadFinishedWorkerConfiguration = new DownloadFinishedWorkerConfiguration(); hostContext.Configuration.GetSection("DownloadFinishedWorker").Bind(downloadFinishedWorkerConfiguration); var transmissionConfiguration = new TransmissionConfiguration(); hostContext.Configuration.GetSection("Transmission").Bind(transmissionConfiguration); var encoderConfiguration = new EncoderConfiguration(); hostContext.Configuration.GetSection("Encoder").Bind(encoderConfiguration); var sofakingConfiguration = new SoFakingConfiguration(); hostContext.Configuration.GetSection("Sofaking").Bind(sofakingConfiguration); services .AddHttpClient() .AddSingleton(transmissionConfiguration) .AddSingleton(sofakingConfiguration) .AddSingleton <TransmissionHttpClientFactory>() .AddSingleton(downloadFinishedWorkerConfiguration) .AddSingleton(encoderConfiguration) .AddSingleton(new SoFakingContextFactory()) .AddSingleton <MovieService>() .AddSingleton <TPBParserService>() .AddSingleton <ITorrentClientService, TransmissionService>() .AddSingleton <IVerifiedMovieSearchService, ImdbService>() //.AddSingleton<IEncoderService, FFMPEGEncoderService>() .AddHostedService <SoFakingWorker>(); });
public SoFakingWorker(ILogger <SoFakingWorker> logger, ILogger <FFMPEGEncoderService> loggerEnc, IHttpClientFactory clientFactory, DownloadFinishedWorkerConfiguration configuration, MovieService movieService, ITorrentClientService torrentClient, /* IEncoderService encoderService,*/ SoFakingConfiguration sofakingConfiguration, EncoderConfiguration encoderConfiguration) { if (clientFactory == null) { throw new ArgumentNullException(nameof(clientFactory)); } if (movieService == null) { throw new ArgumentNullException(nameof(movieService)); } if (configuration == null) { throw new ArgumentNullException(nameof(configuration)); } if (logger == null) { throw new ArgumentNullException(nameof(logger)); } if (loggerEnc == null) { throw new ArgumentNullException(nameof(loggerEnc)); } if (torrentClient == null) { throw new ArgumentNullException(nameof(torrentClient)); } if (encoderConfiguration == null) { throw new ArgumentNullException(nameof(encoderConfiguration)); } if (sofakingConfiguration == null) { throw new ArgumentNullException(nameof(sofakingConfiguration)); } _sofakingConfiguration = sofakingConfiguration; _clientFactory = clientFactory; _movieService = movieService; _configuration = configuration; _logger = logger; _loggerEnc = loggerEnc; _torrentClient = torrentClient; _encoderConfiguration = encoderConfiguration; }