Exemplo n.º 1
0
        public static void EnsureConfigurations([NotNull] Type applicationType, [NotNull] IVostokHostingEnvironmentBuilder builder)
        {
            void SetupSource(IConfigurationProvider provider, IConfigurationSource source, string[] scope, Type type)
            {
                if (scope.Any())
                {
                    source = source.ScopeTo(scope);
                }

                provider.SetupSourceFor(source, type);
            }

            builder.SetupConfiguration(
                b => b.CustomizeConfigurationContext(
                    context =>
            {
                foreach (var requirement in RequirementDetector.GetRequiredConfigurations(applicationType))
                {
                    SetupSource(context.ConfigurationProvider, context.ConfigurationSource, requirement.Scope, requirement.Type);
                }

                foreach (var requirement in RequirementDetector.GetRequiredSecretConfigurations(applicationType))
                {
                    SetupSource(context.SecretConfigurationProvider, context.SecretConfigurationSource, requirement.Scope, requirement.Type);
                }
            }));
        }
Exemplo n.º 2
0
        public static void AddVostokEnvironment(this IServiceCollection services, IVostokHostingEnvironment environment, IVostokApplication application)
        {
            services
            .AddSingleton(environment)
            .AddSingleton(environment.ApplicationIdentity)
            .AddSingleton(environment.ApplicationLimits)
            .AddTransient(_ => environment.ApplicationReplicationInfo)
            .AddSingleton(environment.Metrics)
            .AddSingleton(environment.Log)
            .AddSingleton(environment.Tracer)
            .AddSingleton(environment.HerculesSink)
            .AddSingleton(environment.ConfigurationSource)
            .AddSingleton(environment.ConfigurationProvider)
            .AddSingleton(environment.ClusterConfigClient)
            .AddSingleton(environment.ServiceBeacon)
            .AddSingleton(environment.ServiceLocator)
            .AddSingleton(environment.ContextGlobals)
            .AddSingleton(environment.ContextProperties)
            .AddSingleton(environment.ContextConfiguration)
            .AddSingleton(environment.Datacenters)
            .AddSingleton(environment.HostExtensions);

            foreach (var(type, obj) in environment.HostExtensions.GetAll())
            {
                services.AddSingleton(type, obj);
            }

            if (environment.HostExtensions.TryGet <IVostokApplicationDiagnostics>(out var diagnostics))
            {
                services
                .AddSingleton(diagnostics.Info)
                .AddSingleton(diagnostics.HealthTracker);
            }

            AddSettingsProviders(services, RequirementDetector.GetRequiredConfigurations(application).Select(r => r.Type), environment.ConfigurationProvider);
            AddSettingsProviders(services, RequirementDetector.GetRequiredSecretConfigurations(application).Select(r => r.Type), environment.SecretConfigurationProvider);

            services.AddScoped(_ => FlowingContext.Globals.Get <IRequestInfo>());
        }