using Autofac; using Jackett.Common.Indexers; using Jackett.Common.Indexers.Meta; using Jackett.Common.Models.Config; using Jackett.Common.Services; using Jackett.Common.Services.Interfaces; using Jackett.Common.Utils.Clients; namespace Jackett.Common.Plumbing { public class JackettModule : Autofac.Module { private readonly RuntimeSettings _runtimeSettings; public JackettModule(RuntimeSettings runtimeSettings) => _runtimeSettings = runtimeSettings; protected override void Load(ContainerBuilder builder) { // Just register everything! TODO: Something better and more explicit than scanning everything. builder.RegisterAssemblyTypes(typeof(JackettModule).Assembly) .Except() .Except() .Except() .Except() .Except() .Except() .Except() .Except() .Except() .Except() .Except() .Except() .Except() .Except() .AsImplementedInterfaces().SingleInstance(); builder.RegisterInstance(_runtimeSettings); builder.Register(BuildServerConfig).As().SingleInstance(); builder.RegisterType(); // Register the best web client for the platform or the override switch (_runtimeSettings.ClientOverride) { case "httpclient2": RegisterWebClient(builder); break; default: // "httpclient" RegisterWebClient(builder); break; } } private void RegisterWebClient(ContainerBuilder builder) => builder.RegisterType().As(); private ServerConfig BuildServerConfig(IComponentContext ctx) { var configService = ctx.Resolve(); return configService.BuildServerConfig(_runtimeSettings); } } }