using System.IO.Abstractions; using System.Reflection; using Autofac; using Trash.Command; using Trash.Config; using Trash.Radarr.Api; using Trash.Radarr.QualityDefinition; using Trash.Sonarr.Api; using Trash.Sonarr.QualityDefinition; using Trash.Sonarr.ReleaseProfile; using YamlDotNet.Serialization; namespace Trash { public static class CompositionRoot { // private static void SetupMediator(ContainerBuilder builder) // { // builder // .RegisterType() // .As() // .InstancePerLifetimeScope(); // // builder.Register(context => // { // var c = context.Resolve(); // return t => c.Resolve(t); // }); // // builder.RegisterAssemblyTypes(typeof(CompositionRoot).GetTypeInfo().Assembly).AsImplementedInterfaces(); // } // private static void RegisterConfiguration(ContainerBuilder builder) // where T : BaseConfiguration // { // // builder.Register(ctx => // { // var selector = ctx.Resolve>(); // if (selector.ActiveConfiguration == null) // { // // If this exception is thrown, that means that a BaseCommand subclass has not implemented the // // appropriate logic to set the active configuration via an IConfigurationSelector. // throw new InvalidOperationException("No valid configuration has been selected"); // } // // return selector.ActiveConfiguration; // }) // .As() // .AsSelf(); // } private static void SonarrRegistrations(ContainerBuilder builder) { builder.RegisterType().As(); // Release Profile Support builder.RegisterType(); builder.RegisterType().As(); // Quality Definition Support builder.RegisterType(); builder.RegisterType().As(); } private static void RadarrRegistrations(ContainerBuilder builder) { builder.RegisterType().As(); // Quality Definition Support builder.RegisterType(); builder.RegisterType().As(); } public static IContainer Setup() { var builder = new ContainerBuilder(); builder.RegisterType().As(); // Configuration builder.RegisterType().As(); builder.RegisterGeneric(typeof(ConfigurationLoader<>)).As(typeof(IConfigurationLoader<>)); builder.RegisterGeneric(typeof(ConfigurationProvider<>)) .As(typeof(IConfigurationProvider<>)) .SingleInstance(); // Register all types deriving from BaseCommand. These are all of our supported subcommands. builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()) .Where(t => t.IsAssignableTo(typeof(IBaseCommand))); SonarrRegistrations(builder); RadarrRegistrations(builder); // builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource()); return builder.Build(); } } }