Exemple #1
0
        public void ValidOptionTest(string expected, string[] param)
        {
            var result = new StandaloneCliOptions(param);

            result.Count
            .Should()
            .Be(1);

            result.Values.Should()
            .Equal(expected);
        }
        /// <summary>
        /// Autofac configuration.
        /// </summary>
        /// <param name="configuration"></param>
        /// <returns></returns>
        private IContainer ConfigureContainer(IConfiguration configuration)
        {
            var config  = new Config(configuration);
            var builder = new ContainerBuilder();
            var standaloneCliOptions = new StandaloneCliOptions(configuration);

            RunInStandaloneMode = standaloneCliOptions.RunInStandaloneMode;

            // Register configuration interfaces
            builder.RegisterInstance(config)
            .AsImplementedInterfaces();
            builder.RegisterInstance(config.Configuration)
            .AsImplementedInterfaces();
            builder.RegisterInstance(this)
            .AsImplementedInterfaces();

            builder.RegisterModule <PublisherJobsConfiguration>();

            // Register module and agent framework ...
            builder.RegisterModule <AgentFramework>();
            builder.RegisterModule <ModuleFramework>();
            builder.RegisterModule <NewtonSoftJsonModule>();

            if (RunInStandaloneMode)
            {
                builder.AddDiagnostics(config,
                                       standaloneCliOptions.ToLoggerConfiguration());
                builder.RegisterInstance(standaloneCliOptions)
                .AsImplementedInterfaces();

                // we overwrite the ModuleHost registration from PerLifetimeScope
                // (in builder.RegisterModule<ModuleFramework>) to Singleton as
                // we want to reuse the Client from the ModuleHost in sub-scopes.
                builder.RegisterType <ModuleHost>()
                .AsImplementedInterfaces().SingleInstance();
                // Published nodes file provider
                builder.RegisterType <PublishedNodesProvider>()
                .AsImplementedInterfaces().SingleInstance();
                // Local orchestrator
                builder.RegisterType <StandaloneJobOrchestrator>()
                .AsImplementedInterfaces().SingleInstance();
                // Create jobs from published nodes file
                builder.RegisterType <PublishedNodesJobConverter>()
                .SingleInstance();
                builder.RegisterType <PublisherMethodsController>()
                .AsImplementedInterfaces().InstancePerLifetimeScope();
                // Runtime state reporter.
                builder.RegisterType <RuntimeStateReporter>()
                .AsImplementedInterfaces().SingleInstance();
            }
            else
            {
                builder.AddDiagnostics(config);

                // Client instance per job
                builder.RegisterType <PerDependencyClientAccessor>()
                .AsImplementedInterfaces().InstancePerLifetimeScope();
                // Cloud job orchestrator
                builder.RegisterType <PublisherOrchestratorClient>()
                .AsImplementedInterfaces().SingleInstance();
                // ... plus controllers
                builder.RegisterType <ConfigurationSettingsController>()
                .AsImplementedInterfaces().SingleInstance();
                builder.RegisterType <PublisherSettingsController>()
                .AsImplementedInterfaces().SingleInstance();
                // Note that they must be singleton so they can
                // plug as configuration into the orchestrator client.
            }

            builder.RegisterType <IdentityTokenSettingsController>()
            .AsImplementedInterfaces().SingleInstance();
            builder.RegisterType <StackLogger>()
            .AsImplementedInterfaces().SingleInstance().AutoActivate();

            // Opc specific parts
            builder.RegisterType <DefaultSessionManager>()
            .AsImplementedInterfaces().SingleInstance();
            builder.RegisterType <SubscriptionServices>()
            .AsImplementedInterfaces().SingleInstance();
            builder.RegisterType <VariantEncoderFactory>()
            .AsImplementedInterfaces();

            builder.RegisterType <HealthCheckManager>()
            .AsImplementedInterfaces().SingleInstance();

            return(builder.Build());
        }