public void RegisterComponents(IServiceCollection builder) { builder.AddFeatureToggling(Configuration); // Register v1 services builder .AddSingleton <V1.Interfaces.IAllocationNotificationFeedsService, V1.Services.AllocationNotificationFeedsService>(); builder .AddSingleton <V1.Interfaces.IProviderResultsService, V1.Services.ProviderResultsService>(); builder .AddSingleton <V1.Interfaces.IAllocationsService, V1.Services.AllocationsService>(); builder .AddSingleton <V1.Interfaces.ITimePeriodsService, V1.Services.TimePeriodsService>(); builder .AddSingleton <V1.Interfaces.IFundingStreamService, V1.Services.FundingStreamService>(); // Register v2 services builder .AddSingleton <V2.Interfaces.IAllocationNotificationFeedsService, V2.Services.AllocationNotificationFeedsService>(); builder .AddSingleton <V2.Interfaces.IProviderResultsService, V2.Services.ProviderResultsService>(); builder .AddSingleton <V2.Interfaces.IAllocationsService, V2.Services.AllocationsService>(); builder .AddSingleton <V2.Interfaces.ITimePeriodsService, V2.Services.TimePeriodsService>(); builder .AddSingleton <V2.Interfaces.IFundingStreamService, V2.Services.FundingStreamService>(); // Register dependencies builder .AddSingleton <IAllocationNotificationsFeedsSearchService, AllocationNotificationsFeedsSearchService>() .AddSingleton <IHealthChecker, AllocationNotificationsFeedsSearchService>(); builder .AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>(); builder .AddSingleton <IPublishedResultsService, PublishedResultsService>() .AddSingleton <IHealthChecker, PublishedResultsService>(); builder .AddSingleton <ICalculationProviderResultsSearchService, CalculationProviderResultsSearchService>() .AddSingleton <IHealthChecker, CalculationProviderResultsSearchService>(); builder.AddSingleton <IProviderImportMappingService, ProviderImportMappingService>(); builder .AddSingleton <IAllocationNotificationsFeedsSearchService, AllocationNotificationsFeedsSearchService>(); MapperConfiguration resultsConfig = new MapperConfiguration(c => { c.AddProfile <DatasetsMappingProfile>(); c.AddProfile <ExternalApiMappingProfile>(); }); builder .AddSingleton(resultsConfig.CreateMapper()); builder.AddSingleton <IVersionRepository <SpecificationVersion>, VersionRepository <SpecificationVersion> >((ctx) => { CosmosDbSettings specsVersioningDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", specsVersioningDbSettings); specsVersioningDbSettings.CollectionName = "specs"; CosmosRepository resultsRepostory = new CosmosRepository(specsVersioningDbSettings); return(new VersionRepository <SpecificationVersion>(resultsRepostory)); }); builder.AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>((ctx) => { CosmosDbSettings calssDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", calssDbSettings); calssDbSettings.CollectionName = "calculationresults"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(calssDbSettings); return(new CalculationResultsRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IProviderSourceDatasetRepository, ProviderSourceDatasetRepository>((ctx) => { CosmosDbSettings provDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", provDbSettings); provDbSettings.CollectionName = "providerdatasets"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(provDbSettings); return(new ProviderSourceDatasetRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IPublishedProviderResultsRepository, PublishedProviderResultsRepository>((ctx) => { CosmosDbSettings resultsDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", resultsDbSettings); resultsDbSettings.CollectionName = "publishedproviderresults"; CosmosRepository resultsRepostory = new CosmosRepository(resultsDbSettings); return(new PublishedProviderResultsRepository(resultsRepostory)); }); builder.AddSingleton <IProviderChangesRepository, ProviderChangesRepository>((ctx) => { CosmosDbSettings repoSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", repoSettings); repoSettings.CollectionName = "publishedproviderchanges"; CosmosRepository repo = new CosmosRepository(repoSettings); ILogger logger = ctx.GetRequiredService <ILogger>(); return(new ProviderChangesRepository(repo, logger)); }); builder .AddSingleton <ISpecificationsRepository, SpecificationsRepository>(); builder .AddSingleton <IPublishedProviderResultsAssemblerService, PublishedProviderResultsAssemblerService>(); builder.AddSingleton <Services.Specs.Interfaces.ISpecificationsRepository, Services.Specs.SpecificationsRepository>( ctx => { CosmosDbSettings specRepoDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", specRepoDbSettings); specRepoDbSettings.CollectionName = "specs"; CosmosRepository cosmosRepository = new CosmosRepository(specRepoDbSettings); return(new Services.Specs.SpecificationsRepository(cosmosRepository)); }); builder.AddSingleton <IVersionRepository <PublishedAllocationLineResultVersion>, VersionRepository <PublishedAllocationLineResultVersion> >((ctx) => { CosmosDbSettings versioningDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", versioningDbSettings); versioningDbSettings.CollectionName = "publishedproviderresults"; CosmosRepository resultsRepostory = new CosmosRepository(versioningDbSettings); return(new VersionRepository <PublishedAllocationLineResultVersion>(resultsRepostory)); }); builder.AddSingleton <IPublishedAllocationLineLogicalResultVersionService, PublishedAllocationLineLogicalResultVersionService>(); builder.AddSingleton <IPublishedProviderResultsSettings, PublishedProviderResultsSettings>((ctx) => { PublishedProviderResultsSettings settings = new PublishedProviderResultsSettings(); Configuration.Bind("PublishedProviderResultsSettings", settings); return(settings); }); builder.AddSingleton <IFundingService, FundingService>(); builder.AddSingleton <IValidator <PolicyCreateModel>, PolicyCreateModelValidator>(); builder.AddSingleton <IValidator <SpecificationCreateModel>, SpecificationCreateModelValidator>(); builder.AddSingleton <IValidator <CalculationCreateModel>, CalculationCreateModelValidator>(); builder.AddSingleton <IValidator <AssignDefinitionRelationshipMessage>, AssignDefinitionRelationshipMessageValidator>(); builder.AddSingleton <IValidator <SpecificationEditModel>, SpecificationEditModelValidator>(); builder.AddSingleton <IValidator <PolicyEditModel>, PolicyEditModelValidator>(); builder.AddSingleton <IValidator <CalculationEditModel>, CalculationEditModelValidator>(); builder.AddSingleton <IResultsRepository, ResultsRepository>(); builder.AddResultsInterServiceClient(Configuration); builder.AddUserProviderFromRequest(); builder.AddSearch(Configuration); builder.AddServiceBus(Configuration); builder.AddCaching(Configuration); builder.AddApplicationInsights(Configuration, "CalculateFunding.Api.External"); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.External"); builder.AddLogging("CalculateFunding.Api.External"); builder.AddTelemetry(); builder.AddSpecificationsInterServiceClient(Configuration); builder.AddPolicySettings(Configuration); builder.AddHttpContextAccessor(); builder.AddJobsInterServiceClient(Configuration); builder.AddSingleton <IResultsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ResiliencePolicies() { CalculationProviderResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), ResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), SpecificationsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), AllocationNotificationFeedSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), ProviderProfilingRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedProviderCalculationResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), PublishedProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalculationsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ProviderCalculationResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), ProviderChangesRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CsvBlobPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); builder.AddHealthCheckMiddleware(); builder.AddTransient <ContentTypeCheckMiddleware>(); ServiceProvider = builder.BuildServiceProvider(); }
public void RegisterComponents(IServiceCollection builder) { builder.AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>(); builder .AddSingleton <IResultsService, ResultsService>() .AddSingleton <IHealthChecker, ResultsService>(); builder .AddSingleton <IPublishedResultsService, PublishedResultsService>() .AddSingleton <IHealthChecker, PublishedResultsService>(); builder .AddSingleton <IResultsSearchService, ResultsSearchService>() .AddSingleton <IHealthChecker, ResultsSearchService>(); builder .AddSingleton <IProviderCalculationResultsSearchService, ProviderCalculationResultsSearchService>() .AddSingleton <IHealthChecker, ProviderCalculationResultsSearchService>(); builder .AddSingleton <ICalculationProviderResultsSearchService, CalculationProviderResultsSearchService>() .AddSingleton <IHealthChecker, CalculationProviderResultsSearchService>(); builder.AddSingleton <IProviderImportMappingService, ProviderImportMappingService>(); builder .AddSingleton <IAllocationNotificationsFeedsSearchService, AllocationNotificationsFeedsSearchService>(); builder.AddSingleton <IProviderVariationAssemblerService, ProviderVariationAssemblerService>(); MapperConfiguration resultsConfig = new MapperConfiguration(c => { c.AddProfile <DatasetsMappingProfile>(); c.AddProfile <ResultServiceMappingProfile>(); }); builder .AddSingleton(resultsConfig.CreateMapper()); builder.AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>((ctx) => { CosmosDbSettings calssDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", calssDbSettings); calssDbSettings.CollectionName = "calculationresults"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(calssDbSettings); return(new CalculationResultsRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IProviderSourceDatasetRepository, ProviderSourceDatasetRepository>((ctx) => { CosmosDbSettings provDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", provDbSettings); provDbSettings.CollectionName = "providerdatasets"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(provDbSettings); return(new ProviderSourceDatasetRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IPublishedProviderResultsRepository, PublishedProviderResultsRepository>((ctx) => { CosmosDbSettings resultsDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", resultsDbSettings); resultsDbSettings.CollectionName = "publishedproviderresults"; CosmosRepository resultsRepostory = new CosmosRepository(resultsDbSettings); return(new PublishedProviderResultsRepository(resultsRepostory)); }); builder.AddSingleton <IProviderChangesRepository, ProviderChangesRepository>((ctx) => { CosmosDbSettings resultsDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", resultsDbSettings); resultsDbSettings.CollectionName = "publishedproviderchanges"; CosmosRepository resultsRepostory = new CosmosRepository(resultsDbSettings); ILogger logger = ctx.GetService <ILogger>(); return(new ProviderChangesRepository(resultsRepostory, logger)); }); builder.AddSingleton <IProviderCalculationResultsReIndexerService, ProviderCalculationResultsReIndexerService>(); builder.AddSingleton <IValidator <MasterProviderModel>, MasterProviderModelValidator>(); builder .AddSingleton <ISpecificationsRepository, SpecificationsRepository>(); builder .AddSingleton <ICalculationsRepository, CalculationsRepository>(); builder .AddSingleton <IPublishedProviderResultsAssemblerService, PublishedProviderResultsAssemblerService>(); builder.AddSingleton <IPublishedProviderResultsSettings, PublishedProviderResultsSettings>((ctx) => { PublishedProviderResultsSettings settings = new PublishedProviderResultsSettings(); Configuration.Bind("PublishedProviderResultsSettings", settings); return(settings); }); builder.AddSingleton <IVersionRepository <PublishedAllocationLineResultVersion>, VersionRepository <PublishedAllocationLineResultVersion> >((ctx) => { CosmosDbSettings versioningDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", versioningDbSettings); versioningDbSettings.CollectionName = "publishedproviderresults"; CosmosRepository resultsRepostory = new CosmosRepository(versioningDbSettings); return(new VersionRepository <PublishedAllocationLineResultVersion>(resultsRepostory)); }); builder .AddSingleton <IBlobClient, BlobClient>((ctx) => { AzureStorageSettings storageSettings = new AzureStorageSettings(); Configuration.Bind("AzureStorageSettings", storageSettings); storageSettings.ContainerName = "datasets"; return(new BlobClient(storageSettings)); }); builder.AddUserProviderFromRequest(); builder.AddSearch(Configuration); builder.AddServiceBus(Configuration); builder.AddCaching(Configuration); builder.AddApplicationInsights(Configuration, "CalculateFunding.Api.Results"); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.Results"); builder.AddLogging("CalculateFunding.Api.Results"); builder.AddTelemetry(); builder.AddSpecificationsInterServiceClient(Configuration); builder.AddCalcsInterServiceClient(Configuration); builder.AddJobsInterServiceClient(Configuration); builder.AddPolicySettings(Configuration); builder.AddHttpContextAccessor(); builder.AddFeatureToggling(Configuration); builder.AddSingleton <IPublishedAllocationLineLogicalResultVersionService, PublishedAllocationLineLogicalResultVersionService>(); builder.AddSingleton <IResultsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ResiliencePolicies() { CalculationProviderResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), ResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), SpecificationsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), AllocationNotificationFeedSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(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), CsvBlobPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder.AddHealthCheckMiddleware(); ServiceProvider = builder.BuildServiceProvider(); }
private static IServiceProvider Register(IServiceCollection builder, IConfigurationRoot config) { builder.AddSingleton <OnCreateAllocationLineResultStatusUpdates>(); builder.AddSingleton <OnCreateAllocationLineResultStatusUpdatesFailure>(); builder.AddSingleton <OnCreateInstructAllocationLineResultStatusUpdates>(); builder.AddSingleton <OnCreateInstructAllocationLineResultStatusUpdatesFailure>(); builder.AddSingleton <OnFetchProviderProfileEvent>(); builder.AddSingleton <OnFetchProviderProfileFailure>(); builder.AddSingleton <OnMigrateFeedIndexIdEvent>(); builder.AddSingleton <OnMigrateResultVersionsEvent>(); builder.AddSingleton <OnProviderResultsPublishedEvent>(); builder.AddSingleton <OnProviderResultsPublishedFailure>(); builder.AddSingleton <OnProviderResultsSpecificationCleanup>(); builder.AddSingleton <OnReIndexAllocationNotificationFeeds>(); builder.AddSingleton <OnReIndexCalculationResults>(); builder.AddSingleton <OnCalculationResultsCsvGeneration>(); builder.AddSingleton <OnCalculationResultsCsvGenerationTimer>(); builder.AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>(); builder.AddSingleton <IResultsService, ResultsService>(); builder.AddSingleton <IPublishedResultsService, PublishedResultsService>(); builder.AddSingleton <IResultsSearchService, ResultsSearchService>(); builder.AddSingleton <ICalculationProviderResultsSearchService, CalculationProviderResultsSearchService>(); builder.AddSingleton <IProviderImportMappingService, ProviderImportMappingService>(); builder.AddSingleton <IAllocationNotificationsFeedsSearchService, AllocationNotificationsFeedsSearchService>(); builder.AddSingleton <ICalculationsRepository, CalculationsRepository>(); builder.AddSingleton <IValidator <MasterProviderModel>, MasterProviderModelValidator>(); builder.AddSingleton <IProviderVariationAssemblerService, ProviderVariationAssemblerService>(); builder.AddSingleton <IProviderVariationsService, ProviderVariationsService>(); builder.AddSingleton <IProviderService, ProviderService>(); builder.AddSingleton <IJobHelperService, JobHelperService>(); builder.AddSingleton <IProviderCalculationResultsReIndexerService, ProviderCalculationResultsReIndexerService>(); builder.AddSingleton <IProviderVariationsStorageRepository, ProviderVariationsStorageRepository>((ctx) => { BlobStorageOptions blobStorageOptions = new BlobStorageOptions(); config.Bind("CommonStorageSettings", blobStorageOptions); blobStorageOptions.ContainerName = "providervariations"; return(new ProviderVariationsStorageRepository(blobStorageOptions)); }); MapperConfiguration resultsConfig = new MapperConfiguration(c => { c.AddProfile <DatasetsMappingProfile>(); c.AddProfile <ResultServiceMappingProfile>(); c.AddProfile <ProviderMappingProfile>(); }); builder .AddSingleton(resultsConfig.CreateMapper()); builder.AddCaching(config); builder.AddSingleton <ICalculationResultsRepository, CalculationResultsRepository>((ctx) => { CosmosDbSettings calssDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", calssDbSettings); calssDbSettings.CollectionName = "calculationresults"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(calssDbSettings); return(new CalculationResultsRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IProviderSourceDatasetRepository, ProviderSourceDatasetRepository>((ctx) => { CosmosDbSettings provDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", provDbSettings); provDbSettings.CollectionName = "providerdatasets"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(provDbSettings); return(new ProviderSourceDatasetRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IPublishedProviderResultsRepository, PublishedProviderResultsRepository>((ctx) => { CosmosDbSettings resultsDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", resultsDbSettings); resultsDbSettings.CollectionName = "publishedproviderresults"; CosmosRepository resultsRepostory = new CosmosRepository(resultsDbSettings); return(new PublishedProviderResultsRepository(resultsRepostory)); }); builder.AddSingleton <IProviderChangesRepository, ProviderChangesRepository>((ctx) => { CosmosDbSettings cosmosSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", cosmosSettings); cosmosSettings.CollectionName = "publishedproviderchanges"; CosmosRepository resultsRepostory = new CosmosRepository(cosmosSettings); ILogger logger = ctx.GetService <ILogger>(); return(new ProviderChangesRepository(resultsRepostory, logger)); }); builder .AddSingleton <ISpecificationsRepository, SpecificationsRepository>(); builder .AddSingleton <IPublishedProviderResultsAssemblerService, PublishedProviderResultsAssemblerService>(); builder.AddSingleton <IPublishedProviderResultsSettings, PublishedProviderResultsSettings>((ctx) => { PublishedProviderResultsSettings settings = new PublishedProviderResultsSettings(); config.Bind("PublishedProviderResultsSettings", settings); return(settings); }); builder.AddSingleton <IVersionRepository <PublishedAllocationLineResultVersion>, VersionRepository <PublishedAllocationLineResultVersion> >((ctx) => { CosmosDbSettings versioningDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", versioningDbSettings); versioningDbSettings.CollectionName = "publishedproviderresults"; CosmosRepository resultsRepostory = new CosmosRepository(versioningDbSettings); return(new VersionRepository <PublishedAllocationLineResultVersion>(resultsRepostory)); }); builder .AddSingleton <IBlobClient, AzureStorage.BlobClient>((ctx) => { AzureStorageSettings storageSettings = new AzureStorageSettings(); config.Bind("AzureStorageSettings", storageSettings); storageSettings.ContainerName = "calculationresultscsv"; return(new AzureStorage.BlobClient(storageSettings)); }); builder.AddSearch(config); builder.AddServiceBus(config); builder.AddCaching(config); builder.AddApplicationInsights(config, "CalculateFunding.Functions.Results"); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.Results"); builder.AddLogging("CalculateFunding.Functions.Results"); builder.AddTelemetry(); builder.AddCalcsInterServiceClient(config); builder.AddSpecificationsInterServiceClient(config); builder.AddJobsInterServiceClient(config); builder.AddResultsInterServiceClient(config); builder.AddFeatureToggling(config); builder.AddSingleton <IPublishedAllocationLineLogicalResultVersionService, PublishedAllocationLineLogicalResultVersionService>(); builder.AddSingleton <ICancellationTokenProvider, InactiveCancellationTokenProvider>(); builder.AddSingleton <IAzureBearerTokenProxy, AzureBearerTokenProxy>(); builder.AddHttpClient(HttpClientKeys.Profiling, c => { ApiClientConfigurationOptions opts = new ApiClientConfigurationOptions(); config.Bind("providerProfilingClient", opts); SetDefaultApiClientConfigurationOptions(c, opts, builder); }) .ConfigurePrimaryHttpMessageHandler(() => new ApiClientHandler()) .AddTransientHttpErrorPolicy(c => c.WaitAndRetryAsync(retryTimeSpans)) .AddTransientHttpErrorPolicy(c => c.CircuitBreakerAsync(numberOfExceptionsBeforeCircuitBreaker, circuitBreakerFailurePeriod)); builder.AddSingleton <IProfilingApiClient>((ctx) => { IFeatureToggle featureToggle = ctx.GetService <IFeatureToggle>(); bool enableMockProvider = featureToggle.IsProviderProfilingServiceDisabled(); if (enableMockProvider) { return(new MockProviderProfilingRepository()); } else { IHttpClientFactory httpClientFactory = ctx.GetService <IHttpClientFactory>(); ILogger logger = ctx.GetService <ILogger>(); ICancellationTokenProvider cancellationTokenProvider = ctx.GetService <ICancellationTokenProvider>(); IAzureBearerTokenProxy azureBearerTokenProxy = ctx.GetService <IAzureBearerTokenProxy>(); ICacheProvider cacheProvider = ctx.GetService <ICacheProvider>(); AzureBearerTokenOptions azureBearerTokenOptions = new AzureBearerTokenOptions(); config.Bind("providerProfilingAzureBearerTokenOptions", azureBearerTokenOptions); AzureBearerTokenProvider bearerTokenProvider = new AzureBearerTokenProvider(azureBearerTokenProxy, cacheProvider, azureBearerTokenOptions); return(new ProfilingApiClient(httpClientFactory, HttpClientKeys.Profiling, logger, bearerTokenProvider, cancellationTokenProvider)); } }); PolicySettings policySettings = builder.GetPolicySettings(config); ResiliencePolicies resultsResiliencePolicies = CreateResiliencePolicies(policySettings); builder.AddSingleton <IResultsResiliencePolicies>(resultsResiliencePolicies); builder.AddSingleton <IJobHelperResiliencePolicies>(resultsResiliencePolicies); return(builder.BuildServiceProvider()); }