private static IServiceProvider Register(IServiceCollection builder, IConfigurationRoot config) { // These registrations of the functions themselves are just for the DebugQueue. Ideally we don't want these registered in production if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development") { builder.AddScoped <OnScaleUpCosmosDbCollection>(); builder.AddScoped <OnScaleDownCosmosDbCollection>(); builder.AddScoped <OnIncrementalScaleDownCosmosDbCollection>(); } builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder.AddSingleton <ICosmosDbScalingRepositoryProvider, CosmosDbScalingRepositoryProvider>(); builder.AddSingleton <ICosmosDbScalingService, CosmosDbScalingService>(); builder.AddSingleton <ICosmosDbScalingRequestModelBuilder, CosmosDbScalingRequestModelBuilder>(); builder.AddSingleton <ICosmosDbThrottledEventsFilter, CosmosDbThrottledEventsFilter>(); builder.AddSingleton <IValidator <ScalingConfigurationUpdateModel>, ScalingConfigurationUpdateModelValidator>(); builder.AddSingleton <IJobManagement, JobManagement>(); builder.AddSingleton <CalculationProviderResultsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "calculationresults"; CosmosRepository cosmosRepostory = new CosmosRepository(cosmosDbSettings); return(new CalculationProviderResultsScalingRepository(cosmosRepostory)); }); builder.AddSingleton <ProviderSourceDatasetsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "providerdatasets"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new ProviderSourceDatasetsScalingRepository(cosmosRepository)); }); builder.AddSingleton <PublishedFundingScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "publishedfunding"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new PublishedFundingScalingRepository(cosmosRepository)); }); builder.AddSingleton <CalculationsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "calcs"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new CalculationsScalingRepository(cosmosRepository)); }); builder.AddSingleton <JobsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "jobs"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new JobsScalingRepository(cosmosRepository)); }); builder.AddSingleton <DatasetAggregationsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "datasetaggregations"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new DatasetAggregationsScalingRepository(cosmosRepository)); }); builder.AddSingleton <DatasetsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "datasets"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new DatasetsScalingRepository(cosmosRepository)); }); builder.AddSingleton <ProfilingScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "profiling"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new ProfilingScalingRepository(cosmosRepository)); }); builder.AddSingleton <SpecificationsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "specs"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new SpecificationsScalingRepository(cosmosRepository)); }); builder.AddSingleton <TestResultsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "testresults"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new TestResultsScalingRepository(cosmosRepository)); }); builder.AddSingleton <TestsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "tests"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new TestsScalingRepository(cosmosRepository)); }); builder.AddSingleton <UsersScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "users"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new UsersScalingRepository(cosmosRepository)); }); builder.AddSingleton <ICosmosDbScalingConfigRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "cosmosscalingconfig"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new CosmosDbScalingConfigRepository(cosmosRepository)); }); builder.AddCaching(config); builder.AddScoped <IUserProfileProvider, UserProfileProvider>(); builder.AddJobsInterServiceClient(config); builder.AddServiceBus(config, "cosmosdbscaling"); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.CosmosDbScaling"); builder.AddLogging("CalculateFunding.Functions.CosmosDbScaling", config); builder.AddTelemetry(); builder.AddSingleton <ICosmosDbScalingResiliencePolicies>(m => { PolicySettings policySettings = ServiceCollectionExtensions.GetPolicySettings(config); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); CosmosDbScalingResiliencePolicies resiliencePolicies = new CosmosDbScalingResiliencePolicies() { ScalingRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ScalingConfigRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy) }; return(resiliencePolicies); }); builder.AddSingleton <IJobManagementResiliencePolicies>((ctx) => { PolicySettings policySettings = ServiceCollectionExtensions.GetPolicySettings(config); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new JobManagementResiliencePolicies() { JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); return(builder.BuildServiceProvider()); }
private static IServiceProvider Register(IServiceCollection builder, IConfigurationRoot config) { builder .AddSingleton <OnJobNotification>(); builder .AddSingleton <OnCheckForJobTimeout>(); builder .AddSingleton <IJobManagementService, JobManagementService>(); builder. AddSingleton <IValidator <CreateJobValidationModel>, CreateJobValidator>(); builder .AddSingleton <IJobRepository, JobRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.CollectionName = "jobs"; CosmosRepository jobCosmosRepostory = new CosmosRepository(cosmosDbSettings); return(new JobRepository(jobCosmosRepostory)); }); builder .AddSingleton <INotificationService, NotificationService>(); builder .AddSingleton <IJobDefinitionsService, JobDefinitionsService>(); builder .AddSingleton <IJobDefinitionsRepository, JobDefinitionsRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.CollectionName = "jobdefinitions"; CosmosRepository jobDefinitionsCosmosRepostory = new CosmosRepository(cosmosDbSettings); return(new JobDefinitionsRepository(jobDefinitionsCosmosRepostory)); }); builder.AddServiceBus(config); builder.AddPolicySettings(config); builder.AddCaching(config); builder.AddSingleton <IJobsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); BulkheadPolicy totalNetworkRequestsPolicyNonAsync = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsNonAsyncPolicy(policySettings); return(new ResiliencePolicies { JobDefinitionsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CacheProviderPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), JobRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), JobRepositoryNonAsync = CosmosResiliencePolicyHelper.GenerateNonAsyncCosmosPolicy(totalNetworkRequestsPolicyNonAsync), MessengerServicePolicy = ResiliencePolicyHelpers.GenerateMessagingPolicy(totalNetworkRequestsPolicy) }); }); builder.AddApplicationInsights(config, "CalculateFunding.Functions.Jobs"); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.Jobs"); builder.AddLogging("CalculateFunding.Functions.Jobs"); builder.AddTelemetry(); return(builder.BuildServiceProvider()); }
public void RegisterComponents(IServiceCollection builder) { builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder .AddSingleton <IBuildProjectRepository, BuildProjectRepository>(); builder .AddSingleton <IGherkinParserService, GherkinParserService>(); builder .AddSingleton <IGherkinParser, GherkinParser>(); builder .AddSingleton <ICodeMetadataGeneratorService, ReflectionCodeMetadataGenerator>(); builder .AddSingleton <IStepParserFactory, StepParserFactory>(); builder .AddSingleton <ITestResultsRepository, TestResultsRepository>(); builder .AddSingleton <ISpecificationRepository, SpecificationRepository>(); builder .AddSingleton <IScenariosRepository, ScenariosRepository>(); builder .AddSingleton <ITestEngineService, TestEngineService>() .AddSingleton <IHealthChecker, TestEngineService>(); builder .AddSingleton <ITestEngine, Services.TestRunner.TestEngine>(); builder .AddSingleton <IGherkinExecutor, GherkinExecutor>(); builder .AddSingleton <ICalculationsRepository, CalculationsRepository>(); builder.AddSingleton <ICosmosRepository, CosmosRepository>(); builder.AddSingleton <IProviderSourceDatasetsRepository, ProviderSourceDatasetsRepository>((ctx) => { CosmosDbSettings providersDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.CollectionName = "providersources"; CosmosRepository providersCosmosRepostory = new CosmosRepository(providersDbSettings); EngineSettings engineSettings = ctx.GetService <EngineSettings>(); return(new ProviderSourceDatasetsRepository(providersCosmosRepostory, engineSettings)); }); builder.AddSingleton <IProviderResultsRepository, ProviderResultsRepository>((ctx) => { CosmosDbSettings providersDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.CollectionName = "calculationresults"; CosmosRepository providersCosmosRepostory = new CosmosRepository(providersDbSettings); ICacheProvider cacheProvider = ctx.GetService <ICacheProvider>(); return(new ProviderResultsRepository(providersCosmosRepostory)); }); builder .AddSingleton <ITestResultsSearchService, TestResultsSearchService>() .AddSingleton <IHealthChecker, TestResultsSearchService>(); builder .AddSingleton <ITestResultsCountsService, TestResultsCountsService>() .AddSingleton <IHealthChecker, TestResultsCountsService>(); MapperConfiguration mapperConfig = new MapperConfiguration(c => { c.AddProfile <ResultsMappingProfile>(); c.AddProfile <ProviderMappingProfile>(); }); builder .AddSingleton(mapperConfig.CreateMapper()); builder .AddSingleton <ITestResultsService, TestResultsService>() .AddSingleton <IHealthChecker, TestResultsService>(); builder.AddSingleton <IProviderService, ProviderService>(); builder.AddUserProviderFromRequest(); builder.AddCosmosDb(Configuration); builder.AddSearch(Configuration); builder.AddCalcsInterServiceClient(Configuration); builder.AddSpecificationsInterServiceClient(Configuration); builder.AddScenariosInterServiceClient(Configuration); builder.AddResultsInterServiceClient(Configuration); builder.AddCaching(Configuration); builder.AddApplicationInsights(Configuration, "CalculateFunding.Api.TestEngine"); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.TestEngine"); builder.AddLogging("CalculateFunding.Api.TestEngine"); builder.AddTelemetry(); builder.AddEngineSettings(Configuration); builder.AddPolicySettings(Configuration); builder.AddHttpContextAccessor(); builder.AddFeatureToggling(Configuration); builder.AddSingleton <ITestRunnerResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); Policy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); return(new ResiliencePolicies() { BuildProjectRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProviderRepository = redisPolicy, ProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProviderSourceDatasetsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ScenariosRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(new[] { totalNetworkRequestsPolicy, redisPolicy }), SpecificationRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), TestResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), TestResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy) }); }); builder.AddHealthCheckMiddleware(); }
private static IServiceProvider Register(IServiceCollection builder, IConfigurationRoot config) { builder .AddSingleton <OnEditSpecificationEvent>(); builder .AddSingleton <IUserService, UserService>() .AddSingleton <IHealthChecker, UserService>(); builder .AddSingleton <IFundingStreamPermissionService, FundingStreamPermissionService>() .AddSingleton <IHealthChecker, FundingStreamPermissionService>(); builder.AddSingleton <IValidator <UserCreateModel>, UserCreateModelValidator>(); builder.AddSingleton <IUserRepository, UserRepository>((ctx) => { CosmosDbSettings usersDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", usersDbSettings); usersDbSettings.CollectionName = "users"; CosmosRepository usersCosmosRepostory = new CosmosRepository(usersDbSettings); return(new UserRepository(usersCosmosRepostory)); }); builder .AddSingleton <ISpecificationRepository, SpecificationRepository>(); MapperConfiguration mappingConfig = new MapperConfiguration(c => c.AddProfile <UsersMappingProfile>()); builder.AddSingleton(mappingConfig.CreateMapper()); builder.AddSingleton <IVersionRepository <FundingStreamPermissionVersion>, VersionRepository <FundingStreamPermissionVersion> >((ctx) => { CosmosDbSettings versioningDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", versioningDbSettings); versioningDbSettings.CollectionName = "users"; CosmosRepository versioningRepository = new CosmosRepository(versioningDbSettings); return(new VersionRepository <FundingStreamPermissionVersion>(versioningRepository)); }); builder.AddPolicySettings(config); builder.AddSingleton <IUsersResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new UsersResiliencePolicies { FundingStreamPermissionVersionRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CacheProviderPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), SpecificationRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), UserRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), }); }); builder.AddCosmosDb(config); builder.AddCaching(config); builder.AddApplicationInsights(config, "CalculateFunding.Functions.Users"); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.Users"); builder.AddLogging("CalculateFunding.Functions.Users"); builder.AddTelemetry(); builder.AddSpecificationsInterServiceClient(config); return(builder.BuildServiceProvider()); }
private static IServiceProvider Register(IServiceCollection builder, IConfigurationRoot config) { // These registrations of the functions themselves are just for the DebugQueue. Ideally we don't want these registered in production if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development") { builder.AddScoped <OnJobNotification>(); builder.AddScoped <OnCheckForJobTimeout>(); } builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder.AddSingleton <IJobManagementService, JobManagementService>(); builder .AddSingleton <IValidator <JobDefinition>, JobDefinitionValidator>(); builder. AddSingleton <IValidator <CreateJobValidationModel>, CreateJobValidator>(); builder .AddSingleton <IJobRepository, JobRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "jobs"; CosmosRepository jobCosmosRepostory = new CosmosRepository(cosmosDbSettings); return(new JobRepository(jobCosmosRepostory)); }); builder .AddSingleton <INotificationService, NotificationService>(); builder .AddSingleton <IJobDefinitionsService, JobDefinitionsService>(); builder .AddSingleton <IJobDefinitionsRepository, JobDefinitionsRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "jobdefinitions"; CosmosRepository jobDefinitionsCosmosRepostory = new CosmosRepository(cosmosDbSettings); return(new JobDefinitionsRepository(jobDefinitionsCosmosRepostory)); }); builder.AddServiceBus(config, "jobs"); builder.AddPolicySettings(config); builder.AddCaching(config); builder.AddSingleton <IJobsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); BulkheadPolicy totalNetworkRequestsPolicyNonAsync = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsNonAsyncPolicy(policySettings); return(new ResiliencePolicies { JobDefinitionsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CacheProviderPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), JobRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), MessengerServicePolicy = ResiliencePolicyHelpers.GenerateMessagingPolicy(totalNetworkRequestsPolicy) }); }); builder.AddApplicationInsightsServiceName(config, "CalculateFunding.Functions.Jobs"); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.Jobs"); builder.AddLogging("CalculateFunding.Functions.Jobs"); builder.AddTelemetry(); builder.AddScoped <IUserProfileProvider, UserProfileProvider>(); return(builder.BuildServiceProvider()); }
private static IServiceProvider Register(IServiceCollection builder, IConfigurationRoot config) { // These registrations of the functions themselves are just for the DebugQueue. Ideally we don't want these registered in production if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development") { builder.AddScoped <OnDataDefinitionChanges>(); builder.AddScoped <OnEditCalculationEvent>(); builder.AddScoped <OnEditSpecificationEvent>(); builder.AddScoped <OnDeleteTests>(); builder.AddScoped <OnDeleteTestsFailure>(); } builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder.AddSingleton <IScenariosRepository, ScenariosRepository>((ctx) => { CosmosDbSettings scenariosVersioningDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", scenariosVersioningDbSettings); scenariosVersioningDbSettings.ContainerName = "tests"; CosmosRepository resultsRepostory = new CosmosRepository(scenariosVersioningDbSettings); return(new ScenariosRepository(resultsRepostory)); }); builder.AddSingleton <IScenariosService, ScenariosService>(); builder.AddSingleton <IScenariosSearchService, ScenariosSearchService>(); builder.AddSingleton <IJobManagement, JobManagement>(); builder.AddSingleton <IDeadletterService, DeadletterService>(); builder .AddSingleton <IValidator <CreateNewTestScenarioVersion>, CreateNewTestScenarioVersionValidator>(); builder .AddSingleton <ICalcsRepository, CalcsRepository>(); builder .AddSingleton <ICancellationTokenProvider, InactiveCancellationTokenProvider>(); builder .AddSingleton <IDatasetDefinitionFieldChangesProcessor, DatasetDefinitionFieldChangesProcessor>(); builder.AddSingleton <IVersionRepository <TestScenarioVersion>, VersionRepository <TestScenarioVersion> >((ctx) => { CosmosDbSettings scenariosVersioningDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", scenariosVersioningDbSettings); scenariosVersioningDbSettings.ContainerName = "tests"; CosmosRepository cosmosRepository = new CosmosRepository(scenariosVersioningDbSettings); return(new VersionRepository <TestScenarioVersion>(cosmosRepository, new NewVersionBuilderFactory <TestScenarioVersion>())); }); MapperConfiguration scenariosConfig = new MapperConfiguration(c => { c.AddProfile <DatasetsMappingProfile>(); }); builder .AddSingleton(scenariosConfig.CreateMapper()); builder.AddCalculationsInterServiceClient(config, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddSpecificationsInterServiceClient(config, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddDatasetsInterServiceClient(config); builder.AddJobsInterServiceClient(config, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddSearch(config); builder .AddSingleton <ISearchRepository <ScenarioIndex>, SearchRepository <ScenarioIndex> >(); builder .AddSingleton <ISearchRepository <TestScenarioResultIndex>, SearchRepository <TestScenarioResultIndex> >(); builder.AddServiceBus(config, "scenarios"); builder.AddCaching(config); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.Scenarios"); builder.AddApplicationInsightsServiceName(config, "CalculateFunding.Functions.Scenarios"); builder.AddLogging("CalculateFunding.Functions.Scenarios"); builder.AddTelemetry(); builder.AddFeatureToggling(config); builder.AddPolicySettings(config); builder.AddSingleton <IScenariosResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); AsyncPolicy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); return(new ScenariosResiliencePolicies() { CalcsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), DatasetsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ScenariosRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ScenariosApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }); builder.AddSingleton <IJobManagementResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new JobManagementResiliencePolicies() { JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); builder.AddScoped <IUserProfileProvider, UserProfileProvider>(); return(builder.BuildServiceProvider()); }
private void RegisterComponents(IServiceCollection builder) { builder.AddSpecificationsInterServiceClient(Configuration, handlerLifetime: Timeout.InfiniteTimeSpan) .AddCalculationsInterServiceClient(Configuration, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddScoped <ISpecificationsWithProviderResultsService, SpecificationsWithProviderResultsService>(); builder.AddScoped <IProducerConsumerFactory, ProducerConsumerFactory>(); builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder .AddSingleton <IHealthChecker, ControllerResolverHealthCheck>(); builder.AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>(); builder .AddSingleton <IResultsService, ResultsService>() .AddSingleton <IHealthChecker, ResultsService>(); builder .AddSingleton <IJobManagement, JobManagement>(); builder .AddSingleton <IProviderCalculationResultsSearchService, ProviderCalculationResultsSearchService>() .AddSingleton <IHealthChecker, ProviderCalculationResultsSearchService>(); builder.AddHttpCachingMvc(); string key = Configuration.GetValue <string>("specificationsClient:ApiKey"); builder.AddGraphInterServiceClient(Configuration); builder.AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>((ctx) => { CosmosDbSettings calssDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", calssDbSettings); calssDbSettings.ContainerName = "calculationresults"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(calssDbSettings); EngineSettings engineSettings = ctx.GetService <EngineSettings>(); return(new CalculationResultsRepository(calcsCosmosRepostory, engineSettings)); }); builder.AddSingleton <IProviderSourceDatasetRepository, ProviderSourceDatasetRepository>((ctx) => { CosmosDbSettings provDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", provDbSettings); provDbSettings.ContainerName = "providerdatasets"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(provDbSettings); return(new ProviderSourceDatasetRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IProviderCalculationResultsReIndexerService, ProviderCalculationResultsReIndexerService>(); builder .AddSingleton <ICalculationsRepository, CalculationsRepository>(); builder .AddSingleton <IBlobClient, BlobClient>((ctx) => { AzureStorageSettings storageSettings = new AzureStorageSettings(); Configuration.Bind("AzureStorageSettings", storageSettings); storageSettings.ContainerName = "calcresultexports"; return(new BlobClient(storageSettings)); }); builder.AddSingleton <CommonStorage.IBlobClient>(ctx => { CommonStorage.BlobStorageOptions options = new CommonStorage.BlobStorageOptions(); Configuration.Bind("AzureStorageSettings", options); options.ContainerName = "calcresultexports"; CommonStorage.IBlobContainerRepository blobContainerRepository = new CommonStorage.BlobContainerRepository(options); return(new CommonStorage.BlobClient(blobContainerRepository)); }); builder.AddSearch(Configuration); builder .AddSingleton <ISearchRepository <ProviderCalculationResultsIndex>, SearchRepository <ProviderCalculationResultsIndex> >(); builder.AddServiceBus(Configuration); builder.AddCaching(Configuration); builder.AddApplicationInsightsTelemetry(); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.Results"); builder.AddApplicationInsightsServiceName(Configuration, "CalculateFunding.Api.Results"); builder.AddLogging("CalculateFunding.Api.Results"); builder.AddTelemetry(); builder.AddEngineSettings(Configuration); builder.AddJobsInterServiceClient(Configuration); builder.AddPoliciesInterServiceClient(Configuration); MapperConfiguration resultsConfig = new MapperConfiguration(c => { c.AddProfile <ResultsMappingProfile>(); }); builder.AddSingleton(resultsConfig.CreateMapper()); builder.AddPolicySettings(Configuration); builder.AddHttpContextAccessor(); builder.AddFeatureToggling(Configuration); builder.AddSingleton <IResultsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ResiliencePolicies() { CalculationProviderResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), ResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ProviderProfilingRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedProviderCalculationResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), PublishedProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CalculationsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ProviderChangesRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProviderCalculationResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), PoliciesApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), BlobClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }); builder.AddSingleton <IJobManagementResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new JobManagementResiliencePolicies() { JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }); builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder.AddHealthCheckMiddleware(); if (Configuration.IsSwaggerEnabled()) { builder.ConfigureSwaggerServices(title: "Results Microservice API"); } }
public static void RegisterComponents(IServiceCollection builder, IConfigurationRoot config) { builder.AddSingleton <ICosmosDbScalingRepositoryProvider, CosmosDbScalingRepositoryProvider>(); builder.AddSingleton <ICosmosDbScalingService, CosmosDbScalingService>(); builder.AddSingleton <ICosmosDbScalingRequestModelBuilder, CosmosDbScalingRequestModelBuilder>(); builder.AddSingleton <CalculationProviderResultsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "calculationresults"; CosmosRepository cosmosRepostory = new CosmosRepository(cosmosDbSettings); return(new CalculationProviderResultsScalingRepository(cosmosRepostory)); }); builder.AddSingleton <ProviderSourceDatasetsScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "providerdatasets"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new ProviderSourceDatasetsScalingRepository(cosmosRepository)); }); builder.AddSingleton <PublishedFundingScalingRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "publishedfunding"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new PublishedFundingScalingRepository(cosmosRepository)); }); builder.AddSingleton <ICosmosDbScalingConfigRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosDbSettings); cosmosDbSettings.ContainerName = "cosmosscalingconfig"; CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new CosmosDbScalingConfigRepository(cosmosRepository)); }); builder.AddCaching(config); //builder.AddJobsInterServiceClient(config); Common.Config.ApiClient.Jobs.ServiceCollectionExtensions.AddJobsInterServiceClient(builder, config); builder.AddServiceBus(config); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.CosmosDbScaling"); builder.AddLogging("CalculateFunding.Functions.CosmosDbScaling", config); builder.AddTelemetry(); builder.AddSingleton <ICosmosDbScalingResiliencePolicies>(m => { PolicySettings policySettings = ServiceCollectionExtensions.GetPolicySettings(config); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); CosmosDbScalingResiliencePolicies resiliencePolicies = new CosmosDbScalingResiliencePolicies() { ScalingRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ScalingConfigRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy) }; return(resiliencePolicies); }); }