public static IContainer Build()

in src/ApiPort/ApiPort/DependencyBuilder.cs [25:148]


        public static IContainer Build(ICommandLineOptions options, ProductInformation productInformation)
        {
            var builder = new ContainerBuilder();

            builder.RegisterType<TargetMapper>()
                .As<ITargetMapper>()
                .OnActivated(c => c.Instance.LoadFromConfig(options.TargetMapFile))
                .SingleInstance();

            builder.RegisterInstance<ProductInformation>(productInformation);
            builder.RegisterInstance<ICommandLineOptions>(options);

            builder.RegisterType<ConsoleCredentialProvider>()
                .As<ICredentialProvider>()
                .SingleInstance();
            builder.Register(context =>
            {
                var directory = Path.GetDirectoryName(typeof(Program).GetTypeInfo().Assembly.Location);

                return new ProxyProvider(
                    directory,
                    ConfigurationFile,
                    context.Resolve<ICredentialProvider>());
            })
            .As<IProxyProvider>()
            .SingleInstance();

            if (options.Command == AppCommand.DumpAnalysis)
            {
                builder.RegisterType<FileOutputApiPortService>()
                    .As<IApiPortService>()
                    .SingleInstance();
            }
            else
            {
                builder.Register(context =>
                    new ApiPortService(
                            context.Resolve<ICommandLineOptions>().ServiceEndpoint,
                            context.Resolve<ProductInformation>(),
                            context.Resolve<IProxyProvider>()))
                    .As<IApiPortService>()
                    .SingleInstance();
            }

            builder.RegisterType<FileIgnoreAssemblyInfoList>()
                .As<IEnumerable<IgnoreAssemblyInfo>>()
                .SingleInstance();

            builder.RegisterType<DependencyOrderer>()
                .As<IDependencyOrderer>()
                .SingleInstance();

            builder.RegisterType<ReflectionMetadataDependencyFinder>()
                .As<IDependencyFinder>()
                .SingleInstance();

            builder.RegisterType<DotNetFrameworkFilter>()
                .As<IDependencyFilter>()
                .SingleInstance();

            builder.RegisterType<ReportGenerator>()
                .As<IReportGenerator>()
                .SingleInstance();

            builder.RegisterType<ApiPortClient>()
                .SingleInstance();

            builder.RegisterType<ApiPortService>()
                .SingleInstance();

            builder.RegisterType<WindowsFileSystem>()
                .As<IFileSystem>()
                .SingleInstance();

            builder.RegisterType<ReportFileWriter>()
                .As<IFileWriter>()
                .SingleInstance();

            builder.RegisterType<RequestAnalyzer>()
                .As<IRequestAnalyzer>()
                .SingleInstance();

            builder.RegisterType<AnalysisEngine>()
                .As<IAnalysisEngine>()
                .SingleInstance();

            builder.RegisterType<ConsoleApiPort>()
                .SingleInstance();

            builder.RegisterType<SystemObjectFinder>()
                .SingleInstance();

            builder.RegisterAdapter<ICommandLineOptions, IApiPortOptions>((ctx, opts) =>
            {
                if (opts.OutputFormats?.Any() == true)
                {
                    return opts;
                }

                return new ReadWriteApiPortOptions(opts);
            })
            .SingleInstance();

            builder.RegisterType<DocIdSearchRepl>();

            builder.RegisterType<ApiPortServiceSearcher>()
                .As<ISearcher<string>>()
                .SingleInstance();

            if (Console.IsOutputRedirected)
            {
                builder.RegisterInstance<IProgressReporter>(new TextWriterProgressReporter(Console.Out));
            }
            else
            {
                builder.RegisterType<ConsoleProgressReporter>()
                    .As<IProgressReporter>()
                    .SingleInstance();
            }

            RegisterOfflineModule(builder);

            return builder.Build();
        }