private static ResiliencePolicies CreateResiliencePolicies(PolicySettings policySettings) { AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); ResiliencePolicies resiliencePolicies = 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), ProviderCalculationResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), ProviderChangesRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), PoliciesApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), BlobClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy) }; return(resiliencePolicies); }
private static ResiliencePolicies CreateResiliencePolicies(PolicySettings policySettings) { AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); ResiliencePolicies resiliencePolicies = new ResiliencePolicies { CalculationResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ProvidersApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedProviderVersionRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), SpecificationsRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), BlobClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedFundingRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(), PoliciesApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ProfilingApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), FundingFeedSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), PublishedFundingBlobRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedProviderSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), PublishedIndexSearchResiliencePolicy = PublishedIndexSearchResiliencePolicy.GeneratePublishedIndexSearch(), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy) }; return(resiliencePolicies); }
public static IServiceCollection AddCalcsResiliencePolicies(this IServiceCollection serviceCollection) { serviceCollection.AddSingleton <ICalcsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ResiliencePolicies { CalculationsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CalculationsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), CacheProviderPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), CalculationsVersionsRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), SpecificationsRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), BuildProjectRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), MessagePolicy = ResiliencePolicyHelpers.GenerateMessagingPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SourceFilesRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), DatasetsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PoliciesApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ResultsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); return(serviceCollection); }
private static ProvidersResiliencePolicies CreateResiliencePolicies(AsyncBulkheadPolicy totalNetworkRequestsPolicy) { return(new ProvidersResiliencePolicies { ProviderVersionsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), ProviderVersionMetadataRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), BlobRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PoliciesApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ResultsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = ResiliencePolicyHelpers.GenerateRedisPolicy(), FundingDataZoneApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }
private static PolicyResiliencePolicies CreateResiliencePolicies(PolicySettings policySettings) { AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new PolicyResiliencePolicies { PolicyRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), FundingSchemaRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), FundingTemplateRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), TemplatesSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), TemplatesRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ResultsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }
private static ResiliencePolicies CreateResiliencePolicies(PolicySettings policySettings) { BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ResiliencePolicies { CalculationsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CalculationsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), CacheProviderPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), CalculationsVersionsRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), SpecificationsRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), BuildProjectRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), MessagePolicy = ResiliencePolicyHelpers.GenerateMessagingPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SourceFilesRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), DatasetsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }
private static DatasetsResiliencePolicies CreateResiliencePolicies(PolicySettings policySettings) { AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new DatasetsResiliencePolicies { SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProviderRepository = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), ProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProviderRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), DatasetRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), DatasetSearchService = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), DatasetDefinitionSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), BlobClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ProvidersApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PoliciesApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }
private static ResiliencePolicies CreateResiliencePolicies(AsyncPolicy totalNetworkRequestsPolicy) { return(new ResiliencePolicies { CalculationsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CalculationsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), CacheProviderPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), CalculationsVersionsRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), SpecificationsRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), BuildProjectRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), MessagePolicy = ResiliencePolicyHelpers.GenerateMessagingPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ProvidersApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SourceFilesRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), DatasetsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PoliciesApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), GraphApiClientPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ResultsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalcEngineApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }
public void RegisterComponents(IServiceCollection builder) { builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder .AddSingleton <IPublishedFundingQueryBuilder, PublishedFundingQueryBuilder>(); builder .AddSingleton <IHealthChecker, ControllerResolverHealthCheck>(); builder.AddFeatureToggling(Configuration); // Register v3 services builder .AddSingleton <IFundingFeedService, FundingFeedService>(); builder .AddSingleton <IFundingFeedItemByIdService, FundingFeedItemByIdService>(); builder .AddSingleton <IFileSystemCache, FileSystemCache>() .AddSingleton <IFileSystemAccess, FileSystemAccess>() .AddSingleton <IFileSystemCacheSettings, FileSystemCacheSettings>(); builder.AddSingleton <IFeedItemPreloader, FeedItemPreLoader>() .AddSingleton <IFeedItemPreloaderSettings>(ctx => { FeedItemPreLoaderSettings settings = new FeedItemPreLoaderSettings(); Configuration.Bind("feeditempreloadersettings", settings); return(settings); }); builder.AddSingleton <IExternalApiFileSystemCacheSettings>(ctx => { ExternalApiFileSystemCacheSettings settings = new ExternalApiFileSystemCacheSettings(); Configuration.Bind("externalapifilesystemcachesettings", settings); return(settings); }); builder.AddSingleton <IExternalEngineOptions>(ctx => { ExternalEngineOptions settings = new ExternalEngineOptions(); Configuration.Bind("externalengineoptions", settings); return(settings); }); builder.AddSingleton <IPublishedFundingRetrievalService>((ctx) => { BlobStorageOptions storageSettings = new BlobStorageOptions(); Configuration.Bind("AzureStorageSettings", storageSettings); storageSettings.ContainerName = "publishedfunding"; IBlobContainerRepository blobContainerRepository = new BlobContainerRepository(storageSettings); IBlobClient blobClient = new BlobClient(blobContainerRepository); IExternalApiResiliencePolicies resiliencePolicies = ctx.GetService <IExternalApiResiliencePolicies>(); ILogger logger = ctx.GetService <ILogger>(); IFileSystemCache fileSystemCache = ctx.GetService <IFileSystemCache>(); IExternalApiFileSystemCacheSettings settings = ctx.GetService <IExternalApiFileSystemCacheSettings>(); return(new PublishedFundingRetrievalService(blobClient, resiliencePolicies, fileSystemCache, logger, settings)); }); builder.AddSingleton <IPublishedFundingRepository, PublishedFundingRepository>((ctx) => { CosmosDbSettings calssDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", calssDbSettings); calssDbSettings.ContainerName = "publishedfunding"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(calssDbSettings); IPublishedFundingQueryBuilder publishedFundingQueryBuilder = ctx.GetService <IPublishedFundingQueryBuilder>(); return(new PublishedFundingRepository(calcsCosmosRepostory, publishedFundingQueryBuilder)); }); // Register dependencies builder .AddSingleton <IFundingFeedSearchService, FundingFeedSearchService>() .AddSingleton <IHealthChecker, FundingFeedSearchService>(); builder .AddSingleton <IFundingStreamService, FundingStreamService>(); builder .AddSingleton <IPublishedProviderRetrievalService, PublishedProviderRetrievalService>(); builder.AddSearch(Configuration); builder .AddSingleton <ISearchRepository <PublishedFundingIndex>, SearchRepository <PublishedFundingIndex> >(); builder.AddApplicationInsightsTelemetry(); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.External"); builder.AddApplicationInsightsServiceName(Configuration, "CalculateFunding.Api.External"); builder.AddLogging("CalculateFunding.Api.External"); builder.AddTelemetry(); builder.AddHttpContextAccessor(); builder.AddPolicySettings(Configuration); builder.AddSingleton <IPublishingResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ResiliencePolicies() { FundingFeedSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), PublishedFundingBlobRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedFundingRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProvidersApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); builder.AddSingleton <IExternalApiResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ExternalApiResiliencePolicies() { PublishedProviderBlobRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedFundingBlobRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), PublishedFundingRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), PoliciesApiClientPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); MapperConfiguration externalConfig = new MapperConfiguration(c => { c.AddProfile <ExternalServiceMappingProfile>(); }); builder.AddSingleton(externalConfig.CreateMapper()); builder.AddAuthenticatedHealthCheckMiddleware(); builder.AddTransient <ContentTypeCheckMiddleware>(); builder.AddPoliciesInterServiceClient(Configuration); builder.AddProvidersInterServiceClient(Configuration); builder.AddSingleton <IProviderFundingVersionService>((ctx) => { BlobStorageOptions storageSettings = new BlobStorageOptions(); Configuration.Bind("AzureStorageSettings", storageSettings); storageSettings.ContainerName = "publishedproviderversions"; IBlobContainerRepository blobContainerRepository = new BlobContainerRepository(storageSettings); IBlobClient blobClient = new BlobClient(blobContainerRepository); IExternalApiResiliencePolicies publishingResiliencePolicies = ctx.GetService <IExternalApiResiliencePolicies>(); ILogger logger = ctx.GetService <ILogger>(); IFileSystemCache fileSystemCache = ctx.GetService <IFileSystemCache>(); IExternalApiFileSystemCacheSettings settings = ctx.GetService <IExternalApiFileSystemCacheSettings>(); IPublishedFundingRepository publishedFundingRepository = ctx.GetService <IPublishedFundingRepository>(); return(new ProviderFundingVersionService(blobClient, publishedFundingRepository, logger, publishingResiliencePolicies, fileSystemCache, settings)); }); }
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 <OnTestSpecificationProviderResultsCleanup>(); builder .AddSingleton <OnEditSpecificationEvent>(); builder .AddSingleton <OnTestExecution>(); 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, Services.TestRunner.Services.TestEngineService>(); builder .AddSingleton <ITestEngine, Services.TestRunner.TestEngine>(); builder .AddSingleton <IGherkinExecutor, GherkinExecutor>(); builder .AddSingleton <ICalculationsRepository, CalculationsRepository>(); builder.AddSingleton <IProviderService, ProviderService>(); builder.AddSingleton <ICosmosRepository, CosmosRepository>(); builder.AddSingleton <IProviderSourceDatasetsRepository, ProviderSourceDatasetsRepository>((ctx) => { CosmosDbSettings providersDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.CollectionName = "providerdatasets"; CosmosRepository providersCosmosRepostory = new CosmosRepository(providersDbSettings); EngineSettings engineSettings = ctx.GetService <EngineSettings>(); return(new ProviderSourceDatasetsRepository(providersCosmosRepostory, engineSettings)); }); builder.AddSingleton <IProviderResultsRepository, ProviderResultsRepository>((ctx) => { CosmosDbSettings providersDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.CollectionName = "calculationresults"; CosmosRepository providersCosmosRepostory = new CosmosRepository(providersDbSettings); ICacheProvider cacheProvider = ctx.GetService <ICacheProvider>(); return(new ProviderResultsRepository(providersCosmosRepostory)); }); builder.AddSingleton <ITestResultsSearchService, TestResultsSearchService>(); builder.AddSingleton <ITestResultsCountsService, TestResultsCountsService>(); MapperConfiguration resultsMappingConfiguration = new MapperConfiguration(c => { c.AddProfile <ResultsMappingProfile>(); c.AddProfile <ProviderMappingProfile>(); }); builder .AddSingleton(resultsMappingConfiguration.CreateMapper()); builder.AddSingleton <ITestResultsService, TestResultsService>(); if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development") { builder.AddCosmosDb(config, "testresults"); } else { builder.AddCosmosDb(config); } builder.AddSearch(config); builder.AddSpecificationsInterServiceClient(config); builder.AddScenariosInterServiceClient(config); builder.AddCalcsInterServiceClient(config); builder.AddResultsInterServiceClient(config); builder.AddCaching(config); builder.AddApplicationInsights(config, "CalculateFunding.Functions.TestEngine"); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.TestEngine", TelemetryChannelType.Sync); builder.AddLogging("CalculateFunding.Functions.TestEngine"); builder.AddTelemetry(); builder.AddEngineSettings(config); builder.AddPolicySettings(config); builder.AddFeatureToggling(config); builder.AddSingleton <ITestRunnerResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); Policy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); ResiliencePolicies resiliencePolicies = 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) }; return(resiliencePolicies); }); return(builder.BuildServiceProvider()); }
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 <IDefinitionsService, DefinitionsService>() .AddSingleton <IHealthChecker, DefinitionsService>(); builder .AddSingleton <IDatasetService, DatasetService>() .AddSingleton <IHealthChecker, DatasetService>(); builder .AddSingleton <IProcessDatasetService, ProcessDatasetService>() .AddSingleton <IHealthChecker, ProcessDatasetService>(); builder .AddSingleton <IValidator <CreateNewDatasetModel>, CreateNewDatasetModelValidator>(); builder .AddSingleton <IValidator <DatasetVersionUpdateModel>, DatasetVersionUpdateModelValidator>(); builder .AddSingleton <IValidator <DatasetMetadataModel>, DatasetMetadataModelValidator>(); builder .AddSingleton <IValidator <GetDatasetBlobModel>, GetDatasetBlobModelValidator>(); builder .AddSingleton <IValidator <CreateDefinitionSpecificationRelationshipModel>, CreateDefinitionSpecificationRelationshipModelValidator>(); builder .AddSingleton <IExcelWriter <DatasetDefinition>, DataDefinitionExcelWriter>(); builder .AddSingleton <IValidator <ExcelPackage>, DatasetWorksheetValidator>(); builder .AddSingleton <IDefinitionChangesDetectionService, DefinitionChangesDetectionService>(); builder .AddSingleton <IDatasetDefinitionNameChangeProcessor, DatasetDefinitionNameChangeProcessor>(); builder .AddSingleton <IBlobClient, BlobClient>((ctx) => { AzureStorageSettings storageSettings = new AzureStorageSettings(); Configuration.Bind("AzureStorageSettings", storageSettings); storageSettings.ContainerName = "datasets"; return(new BlobClient(storageSettings)); }); builder.AddSingleton <IProvidersResultsRepository, ProvidersResultsRepository>((ctx) => { CosmosDbSettings dbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", dbSettings); dbSettings.CollectionName = "providerdatasets"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(dbSettings); return(new ProvidersResultsRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IDatasetsAggregationsRepository, DatasetsAggregationsRepository>((ctx) => { CosmosDbSettings dbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", dbSettings); dbSettings.CollectionName = "datasetaggregations"; CosmosRepository aggsCosmosRepostory = new CosmosRepository(dbSettings); return(new DatasetsAggregationsRepository(aggsCosmosRepostory)); }); builder.AddSingleton <IVersionRepository <ProviderSourceDatasetVersion>, VersionRepository <ProviderSourceDatasetVersion> >((ctx) => { CosmosDbSettings ProviderSourceDatasetVersioningDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", ProviderSourceDatasetVersioningDbSettings); ProviderSourceDatasetVersioningDbSettings.CollectionName = "providersources"; CosmosRepository cosmosRepository = new CosmosRepository(ProviderSourceDatasetVersioningDbSettings); return(new VersionRepository <ProviderSourceDatasetVersion>(cosmosRepository)); }); builder.AddSingleton <IDatasetRepository, DataSetsRepository>(); builder.AddSingleton <IDatasetSearchService, DatasetSearchService>() .AddSingleton <IHealthChecker, DatasetSearchService>(); builder.AddSingleton <IDatasetDefinitionSearchService, DatasetDefinitionSearchService>(); builder .AddSingleton <IDefinitionSpecificationRelationshipService, DefinitionSpecificationRelationshipService>() .AddSingleton <IHealthChecker, DefinitionSpecificationRelationshipService>(); builder .AddSingleton <ISpecificationsRepository, SpecificationsRepository>(); builder .AddSingleton <IExcelDatasetReader, ExcelDatasetReader>(); builder .AddSingleton <IProviderService, ProviderService>(); builder .AddSingleton <ICalcsRepository, CalcsRepository>(); builder .AddSingleton <IResultsRepository, ResultsRepository>(); builder .AddSingleton <ICancellationTokenProvider, HttpContextCancellationProvider>(); MapperConfiguration dataSetsConfig = new MapperConfiguration(c => { c.AddProfile <DatasetsMappingProfile>(); c.AddProfile <ProviderMappingProfile>(); }); builder .AddSingleton(dataSetsConfig.CreateMapper()); builder.AddUserProviderFromRequest(); builder.AddCalcsInterServiceClient(Configuration); builder.AddResultsInterServiceClient(Configuration); builder.AddSpecificationsInterServiceClient(Configuration); builder.AddJobsInterServiceClient(Configuration); builder.AddCosmosDb(Configuration); builder.AddSearch(Configuration); builder.AddServiceBus(Configuration); builder.AddCaching(Configuration); builder.AddFeatureToggling(Configuration); builder.AddApplicationInsights(Configuration, "CalculateFunding.Api.Datasets"); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.Datasets"); builder.AddLogging("CalculateFunding.Api.Datasets"); builder.AddTelemetry(); builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder.AddPolicySettings(Configuration); builder.AddHttpContextAccessor(); builder.AddSingleton <IDatasetsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); Policy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); return(new DatasetsResiliencePolicies() { SpecificationsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProviderRepository = redisPolicy, ProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProviderRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), DatasetRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), DatasetSearchService = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), DatasetDefinitionSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), BlobClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }); builder.AddTransient <IValidator <DatasetUploadValidationModel>, DatasetItemValidator>(); builder.AddSingleton <IProviderService, ProviderService>(); builder.AddHealthCheckMiddleware(); }
public void RegisterComponents(IServiceCollection builder) { builder .AddSingleton <ICalculationsRepository, CalculationsRepository>(); builder .AddSingleton <ICalculationService, CalculationService>() .AddSingleton <IHealthChecker, CalculationService>(); builder .AddSingleton <ICalculationCodeReferenceUpdate, CalculationCodeReferenceUpdate>() .AddSingleton <ITokenChecker, TokenChecker>(); builder .AddSingleton <ICalculationsSearchService, CalculationSearchService>() .AddSingleton <IHealthChecker, CalculationSearchService>(); builder .AddSingleton <IValidator <Calculation>, CalculationModelValidator>(); builder .AddSingleton <IPreviewService, PreviewService>() .AddSingleton <IHealthChecker, PreviewService>(); builder .AddSingleton <ICompilerFactory, CompilerFactory>(); builder .AddSingleton <CSharpCompiler>() .AddSingleton <VisualBasicCompiler>() .AddSingleton <VisualBasicSourceFileGenerator>(); builder .AddSingleton <ISourceFileGeneratorProvider, SourceFileGeneratorProvider>(); builder .AddSingleton <IValidator <PreviewRequest>, PreviewRequestModelValidator>(); builder .AddSingleton <IProviderResultsRepository, ProviderResultsRepository>() .AddSingleton <IHealthChecker, ProviderResultsRepository>(); builder .AddSingleton <ISpecificationRepository, SpecificationRepository>(); builder .AddSingleton <IBuildProjectsService, BuildProjectsService>() .AddSingleton <IHealthChecker, BuildProjectsService>(); builder .AddSingleton <IBuildProjectsRepository, BuildProjectsRepository>() .AddSingleton <IHealthChecker, BuildProjectsRepository>(); builder .AddSingleton <ICodeMetadataGeneratorService, ReflectionCodeMetadataGenerator>(); builder .AddSingleton <IDatasetRepository, DatasetRepository>(); builder.AddSingleton <ISourceCodeService, SourceCodeService>(); builder .AddSingleton <IDatasetDefinitionFieldChangesProcessor, DatasetDefinitionFieldChangesProcessor>(); builder.AddSingleton <ISourceFileRepository, SourceFileRepository>((ctx) => { BlobStorageOptions blobStorageOptions = new BlobStorageOptions(); Configuration.Bind("CommonStorageSettings", blobStorageOptions); blobStorageOptions.ContainerName = "source"; return(new SourceFileRepository(blobStorageOptions)); }); builder.AddSingleton <IVersionRepository <CalculationVersion>, VersionRepository <CalculationVersion> >((ctx) => { CosmosDbSettings calcsVersioningDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", calcsVersioningDbSettings); calcsVersioningDbSettings.CollectionName = "calcs"; CosmosRepository resultsRepostory = new CosmosRepository(calcsVersioningDbSettings); return(new VersionRepository <CalculationVersion>(resultsRepostory)); }); builder .AddSingleton <ICancellationTokenProvider, HttpContextCancellationProvider>(); builder.AddUserProviderFromRequest(); builder.AddCosmosDb(Configuration); builder.AddSearch(Configuration); builder.AddServiceBus(Configuration); builder.AddResultsInterServiceClient(Configuration); builder.AddSpecificationsInterServiceClient(Configuration); builder.AddDatasetsInterServiceClient(Configuration); builder.AddJobsInterServiceClient(Configuration); builder.AddCaching(Configuration); builder.AddApplicationInsights(Configuration, "CalculateFunding.Api.Calcs"); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.Calcs"); builder.AddLogging("CalculateFunding.Api.Calcs"); builder.AddTelemetry(); builder.AddEngineSettings(Configuration); builder.AddFeatureToggling(Configuration); builder.AddPolicySettings(Configuration); builder.AddSingleton <ICalcsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new ResiliencePolicies { CalculationsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), CalculationsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), CacheProviderPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy), CalculationsVersionsRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), SpecificationsRepositoryPolicy = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), BuildProjectRepositoryPolicy = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), MessagePolicy = ResiliencePolicyHelpers.GenerateMessagingPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SourceFilesRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), DatasetsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }); builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder.AddHttpContextAccessor(); builder.AddHealthCheckMiddleware(); }
public void RegisterComponents(IServiceCollection builder) { builder .AddSpecificationsInterServiceClient(Configuration, handlerLifetime: Timeout.InfiniteTimeSpan) .AddCalculationsInterServiceClient(Configuration, handlerLifetime: Timeout.InfiniteTimeSpan) .AddResultsInterServiceClient(Configuration, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder.AddSingleton <IIoCValidatorFactory, ValidatorFactory>() .AddSingleton <IValidator <Reference>, AuthorValidator>(); builder .AddSingleton <IHealthChecker, ControllerResolverHealthCheck>(); builder .AddSingleton <IFundingStreamService, FundingStreamService>() .AddSingleton <IHealthChecker, FundingStreamService>() .AddSingleton <IValidator <FundingStreamSaveModel>, FundingStreamSaveModelValidator>(); builder .AddSingleton <IFundingPeriodService, FundingPeriodService>() .AddSingleton <IHealthChecker, FundingPeriodService>() .AddSingleton <IFundingPeriodValidator, FundingPeriodValidator>(); builder .AddSingleton <IFundingSchemaService, FundingSchemaService>() .AddSingleton <IHealthChecker, FundingSchemaService>(); builder .AddSingleton <IFundingConfigurationService, FundingConfigurationService>() .AddSingleton <IHealthChecker, FundingConfigurationService>(); builder .AddSingleton <IFundingTemplateService, FundingTemplateService>() .AddSingleton <IHealthChecker, FundingTemplateService>(); builder .AddSingleton <IFundingTemplateValidationService, FundingTemplateValidationService>() .AddSingleton <IHealthChecker, FundingTemplateValidationService>(); builder .AddSingleton <IFundingDateService, FundingDateService>() .AddSingleton <IHealthChecker, FundingDateService>(); builder .AddSingleton <IFundingSchemaRepository, FundingSchemaRepository>((ctx) => { BlobStorageOptions blobStorageOptions = new BlobStorageOptions(); Configuration.Bind("AzureStorageSettings", blobStorageOptions); blobStorageOptions.ContainerName = "fundingschemas"; IBlobContainerRepository blobContainerRepository = new BlobContainerRepository(blobStorageOptions); return(new FundingSchemaRepository(blobContainerRepository)); }); builder .AddSingleton <IFundingTemplateRepository, FundingTemplateRepository>((ctx) => { BlobStorageOptions blobStorageOptions = new BlobStorageOptions(); Configuration.Bind("AzureStorageSettings", blobStorageOptions); blobStorageOptions.ContainerName = "fundingtemplates"; IBlobContainerRepository blobContainerRepository = new BlobContainerRepository(blobStorageOptions); return(new FundingTemplateRepository(blobContainerRepository)); }); builder .AddSingleton <IPolicyRepository, PolicyRepository>((ctx) => { CosmosDbSettings cosmosDbSettings = new CosmosDbSettings { ContainerName = "policy" }; Configuration.Bind("CosmosDbSettings", cosmosDbSettings); CosmosRepository cosmosRepository = new CosmosRepository(cosmosDbSettings); return(new PolicyRepository(cosmosRepository)); }); builder.AddSingleton <IPolicyResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); Polly.AsyncPolicy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); return(new PolicyResiliencePolicies { PolicyRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProvider = redisPolicy, FundingSchemaRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), FundingTemplateRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), TemplatesSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), TemplatesRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), ResultsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }); builder.AddSingleton <IValidator <FundingConfiguration>, SaveFundingConfigurationValidator>(); builder.AddSingleton <IValidator <FundingPeriodsJsonModel>, FundingPeriodJsonModelValidator>(); builder.AddSingleton <IValidator <FundingDate>, SaveFundingDateValidator>(); RegisterTemplateBuilderComponents(builder); builder.AddPolicySettings(Configuration); builder.AddJobsInterServiceClient(Configuration); MapperConfiguration fundingConfMappingConfig = new MapperConfiguration(c => { c.AddProfile <FundingConfigurationMappingProfile>(); }); builder .AddSingleton(fundingConfMappingConfig.CreateMapper()); builder.AddSearch(Configuration); builder.AddSingleton <TemplateSearchService>() .AddSingleton <IHealthChecker, TemplateSearchService>(); builder .AddSingleton <ISearchRepository <TemplateIndex>, SearchRepository <TemplateIndex> >(); builder.AddCaching(Configuration); builder.AddApplicationInsightsTelemetry(); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.Policy"); builder.AddApplicationInsightsServiceName(Configuration, "CalculateFunding.Api.Policy"); builder.AddLogging("CalculateFunding.Api.Policy"); builder.AddTelemetry(); builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder.AddHttpContextAccessor(); builder.AddHealthCheckMiddleware(); if (Configuration.IsSwaggerEnabled()) { builder.ConfigureSwaggerServices(title: "Policy Microservice API"); } }
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 <OnTestSpecificationProviderResultsCleanup>(); builder.AddScoped <OnEditSpecificationEvent>(); builder.AddScoped <OnTestExecution>(); builder.AddScoped <OnDeleteTestResults>(); builder.AddScoped <OnDeleteTestResultsFailure>(); } builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder .AddSingleton <IGherkinParserService, GherkinParserService>(); builder .AddSingleton <IGherkinParser, GherkinParser>(); builder .AddSingleton <ICodeMetadataGeneratorService, ReflectionCodeMetadataGenerator>(); builder .AddSingleton <IStepParserFactory, StepParserFactory>(); builder.AddSingleton <ITestResultsRepository, TestResultsRepository>((ctx) => { CosmosDbSettings testResultsDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", testResultsDbSettings); testResultsDbSettings.ContainerName = "testresults"; CosmosRepository providersCosmosRepostory = new CosmosRepository(testResultsDbSettings); EngineSettings engineSettings = ctx.GetService <EngineSettings>(); ILogger logger = ctx.GetService <ILogger>(); return(new TestResultsRepository(providersCosmosRepostory, logger, engineSettings)); }); builder .AddSingleton <IScenariosRepository, ScenariosRepository>(); builder .AddScoped <ITestEngineService, 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(); config.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.ContainerName = "providerdatasets"; CosmosRepository providersCosmosRepostory = new CosmosRepository(providersDbSettings); EngineSettings engineSettings = ctx.GetService <EngineSettings>(); return(new ProviderSourceDatasetsRepository(providersCosmosRepostory, engineSettings)); }); builder.AddSingleton <IProviderResultsRepository, ProviderResultsRepository>((ctx) => { CosmosDbSettings providersDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.ContainerName = "calculationresults"; CosmosRepository providersCosmosRepostory = new CosmosRepository(providersDbSettings); return(new ProviderResultsRepository(providersCosmosRepostory)); }); builder.AddSingleton <ITestResultsSearchService, TestResultsSearchService>(); builder.AddSingleton <ITestResultsCountsService, TestResultsCountsService>(); builder.AddSingleton <IJobManagement, JobManagement>(); builder.AddSingleton <IDeadletterService, DeadletterService>(); MapperConfiguration mappingConfiguration = new MapperConfiguration(c => { c.AddProfile <TestEngineMappingProfile>(); }); builder .AddSingleton(mappingConfiguration.CreateMapper()); builder.AddScoped <ITestResultsService, TestResultsService>(); builder.AddSearch(config); builder .AddSingleton <ISearchRepository <TestScenarioResultIndex>, SearchRepository <TestScenarioResultIndex> >(); builder.AddSpecificationsInterServiceClient(config, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddScenariosInterServiceClient(config); builder.AddCalculationsInterServiceClient(config, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddProvidersInterServiceClient(config, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddJobsInterServiceClient(config, handlerLifetime: Timeout.InfiniteTimeSpan); builder.AddCaching(config); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.TestEngine", TelemetryChannelType.Sync); builder.AddApplicationInsightsServiceName(config, "CalculateFunding.Functions.TestEngine"); builder.AddLogging("CalculateFunding.Functions.TestEngine"); builder.AddServiceBus(config, "testengine"); builder.AddTelemetry(); builder.AddEngineSettings(config); builder.AddPolicySettings(config); builder.AddFeatureToggling(config); builder.AddSingleton((Func <IServiceProvider, ITestRunnerResiliencePolicies>)((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); AsyncPolicy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); ResiliencePolicies resiliencePolicies = new ResiliencePolicies() { CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProviderRepository = redisPolicy, ProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProviderSourceDatasetsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ScenariosRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(new[] { totalNetworkRequestsPolicy, redisPolicy }), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), TestResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), TestResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy) }; return(resiliencePolicies); })); 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()); }
public void RegisterComponents(IServiceCollection builder) { builder.AddSingleton <IUserProfileProvider, UserProfileProvider>(); builder .AddSingleton <IHealthChecker, ControllerResolverHealthCheck>(); builder.AddApiKeyMiddlewareSettings((IConfigurationRoot)Configuration); builder .AddSingleton <IGherkinParserService, GherkinParserService>(); builder .AddSingleton <IGherkinParser, GherkinParser>(); builder .AddSingleton <ICodeMetadataGeneratorService, ReflectionCodeMetadataGenerator>(); builder .AddSingleton <IStepParserFactory, StepParserFactory>(); builder.AddSingleton <ITestResultsRepository, TestResultsRepository>((ctx) => { CosmosDbSettings providersDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.ContainerName = "testresults"; CosmosRepository providersCosmosRepostory = new CosmosRepository(providersDbSettings); ILogger logger = ctx.GetService <ILogger>(); EngineSettings engineSettings = ctx.GetService <EngineSettings>(); return(new TestResultsRepository(providersCosmosRepostory, logger, engineSettings)); }); builder .AddSingleton <IScenariosRepository, ScenariosRepository>(); builder .AddScoped <ITestEngineService, TestEngineService>() .AddScoped <IHealthChecker, TestEngineService>(); builder .AddSingleton <ITestEngine, Services.TestRunner.TestEngine>(); builder .AddSingleton <IGherkinExecutor, GherkinExecutor>(); builder .AddSingleton <ICalculationsRepository, CalculationsRepository>(); builder.AddSingleton <IProviderSourceDatasetsRepository, ProviderSourceDatasetsRepository>((ctx) => { CosmosDbSettings providersDbSettings = new CosmosDbSettings(); Configuration.Bind("CosmosDbSettings", providersDbSettings); providersDbSettings.ContainerName = "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.ContainerName = "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 <TestEngineMappingProfile>(); }); builder.AddScoped <IJobManagement, JobManagement>(); builder .AddSingleton(mapperConfig.CreateMapper()); builder .AddScoped <ITestResultsService, TestResultsService>() .AddScoped <IHealthChecker, TestResultsService>(); builder.AddSearch(Configuration); builder .AddSingleton <ISearchRepository <TestScenarioResultIndex>, SearchRepository <TestScenarioResultIndex> >(); builder.AddServiceBus(Configuration); builder.AddCalculationsInterServiceClient(Configuration); builder.AddSpecificationsInterServiceClient(Configuration); builder.AddScenariosInterServiceClient(Configuration); builder.AddProvidersInterServiceClient(Configuration); builder.AddJobsInterServiceClient(Configuration); builder.AddCaching(Configuration); builder.AddApplicationInsightsTelemetry(); builder.AddApplicationInsightsTelemetryClient(Configuration, "CalculateFunding.Api.TestEngine"); builder.AddApplicationInsightsServiceName(Configuration, "CalculateFunding.Api.TestEngine"); builder.AddLogging("CalculateFunding.Api.TestEngine"); builder.AddTelemetry(); builder.AddEngineSettings(Configuration); builder.AddPolicySettings(Configuration); builder.AddHttpContextAccessor(); builder.AddFeatureToggling(Configuration); builder.AddSingleton((System.Func <System.IServiceProvider, ITestRunnerResiliencePolicies>)((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); AsyncPolicy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); return(new ResiliencePolicies() { CalculationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProviderRepository = redisPolicy, ProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProviderSourceDatasetsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ScenariosRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(new[] { totalNetworkRequestsPolicy, redisPolicy }), SpecificationsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), TestResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), TestResultsSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy) }); })); builder.AddSingleton <IJobManagementResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); AsyncBulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); return(new JobManagementResiliencePolicies() { JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), }); }); builder.AddHealthCheckMiddleware(); if (Configuration.IsSwaggerEnabled()) { builder.ConfigureSwaggerServices(title: "TestRunner Microservice API"); } }
private static IServiceProvider Register(IServiceCollection builder, IConfigurationRoot config) { builder .AddSingleton <OnDataDefinitionChanges>(); builder .AddSingleton <OnDatasetEvent>(); builder .AddSingleton <OnDatasetValidationEvent>(); builder .AddSingleton <IDefinitionsService, DefinitionsService>(); builder .AddSingleton <IDatasetService, DatasetService>(); builder .AddSingleton <IProcessDatasetService, ProcessDatasetService>(); builder .AddSingleton <IValidator <CreateNewDatasetModel>, CreateNewDatasetModelValidator>(); builder .AddSingleton <IValidator <DatasetVersionUpdateModel>, DatasetVersionUpdateModelValidator>(); builder .AddSingleton <IValidator <DatasetMetadataModel>, DatasetMetadataModelValidator>(); builder .AddSingleton <IValidator <GetDatasetBlobModel>, GetDatasetBlobModelValidator>(); builder .AddSingleton <IValidator <CreateDefinitionSpecificationRelationshipModel>, CreateDefinitionSpecificationRelationshipModelValidator>(); builder .AddSingleton <IExcelWriter <DatasetDefinition>, DataDefinitionExcelWriter>(); builder .AddSingleton <IValidator <ExcelPackage>, DatasetWorksheetValidator>(); builder .AddSingleton <IDefinitionChangesDetectionService, DefinitionChangesDetectionService>(); builder .AddSingleton <IDatasetDefinitionNameChangeProcessor, DatasetDefinitionNameChangeProcessor>(); builder .AddSingleton <IBlobClient, BlobClient>((ctx) => { AzureStorageSettings storageSettings = new AzureStorageSettings(); config.Bind("AzureStorageSettings", storageSettings); storageSettings.ContainerName = "datasets"; return(new BlobClient(storageSettings)); }); builder.AddSingleton <IProvidersResultsRepository, ProvidersResultsRepository>((ctx) => { CosmosDbSettings dbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", dbSettings); dbSettings.CollectionName = "providerdatasets"; CosmosRepository calcsCosmosRepostory = new CosmosRepository(dbSettings); return(new ProvidersResultsRepository(calcsCosmosRepostory)); }); builder.AddSingleton <IDatasetRepository, DataSetsRepository>(); builder.AddSingleton <IDatasetSearchService, DatasetSearchService>(); builder.AddSingleton <IDatasetDefinitionSearchService, DatasetDefinitionSearchService>(); builder .AddSingleton <IDefinitionSpecificationRelationshipService, DefinitionSpecificationRelationshipService>(); builder .AddSingleton <ISpecificationsRepository, SpecificationsRepository>(); builder .AddSingleton <IExcelDatasetReader, ExcelDatasetReader>(); builder.AddSingleton <IProviderService, ProviderService>(); builder .AddSingleton <ICalcsRepository, CalcsRepository>(); builder .AddSingleton <IResultsRepository, ResultsRepository>(); builder.AddTransient <IValidator <DatasetUploadValidationModel>, DatasetItemValidator>(); MapperConfiguration dataSetsConfig = new MapperConfiguration(c => { c.AddProfile <DatasetsMappingProfile>(); c.AddProfile <ProviderMappingProfile>(); }); builder .AddSingleton(dataSetsConfig.CreateMapper()); builder.AddSingleton <IVersionRepository <ProviderSourceDatasetVersion>, VersionRepository <ProviderSourceDatasetVersion> >((ctx) => { CosmosDbSettings ProviderSourceDatasetVersioningDbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", ProviderSourceDatasetVersioningDbSettings); ProviderSourceDatasetVersioningDbSettings.CollectionName = "providerdatasets"; CosmosRepository cosmosRepository = new CosmosRepository(ProviderSourceDatasetVersioningDbSettings); return(new VersionRepository <ProviderSourceDatasetVersion>(cosmosRepository)); }); builder.AddSingleton <IDatasetsAggregationsRepository, DatasetsAggregationsRepository>((ctx) => { CosmosDbSettings dbSettings = new CosmosDbSettings(); config.Bind("CosmosDbSettings", dbSettings); dbSettings.CollectionName = "datasetaggregations"; CosmosRepository aggsCosmosRepostory = new CosmosRepository(dbSettings); return(new DatasetsAggregationsRepository(aggsCosmosRepostory)); }); builder.AddCalcsInterServiceClient(config); builder.AddResultsInterServiceClient(config); builder.AddSpecificationsInterServiceClient(config); builder.AddJobsInterServiceClient(config); if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Development") { builder.AddCosmosDb(config, "datasets"); } else { builder.AddCosmosDb(config); } builder.AddSearch(config); builder.AddServiceBus(config); builder.AddCaching(config); builder.AddApplicationInsights(config, "CalculateFunding.Functions.Datasets"); builder.AddApplicationInsightsTelemetryClient(config, "CalculateFunding.Functions.Datasets"); builder.AddLogging("CalculateFunding.Functions.Datasets"); builder.AddTelemetry(); builder.AddPolicySettings(config); builder.AddFeatureToggling(config); builder.AddSingleton <IDatasetsResiliencePolicies>((ctx) => { PolicySettings policySettings = ctx.GetService <PolicySettings>(); BulkheadPolicy totalNetworkRequestsPolicy = ResiliencePolicyHelpers.GenerateTotalNetworkRequestsPolicy(policySettings); Policy redisPolicy = ResiliencePolicyHelpers.GenerateRedisPolicy(totalNetworkRequestsPolicy); return(new DatasetsResiliencePolicies() { SpecificationsRepository = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), CacheProviderRepository = redisPolicy, ProviderResultsRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), ProviderRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), DatasetRepository = CosmosResiliencePolicyHelper.GenerateCosmosPolicy(totalNetworkRequestsPolicy), DatasetSearchService = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), DatasetDefinitionSearchRepository = SearchResiliencePolicyHelper.GenerateSearchPolicy(totalNetworkRequestsPolicy), BlobClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy), JobsApiClient = ResiliencePolicyHelpers.GenerateRestRepositoryPolicy(totalNetworkRequestsPolicy) }); }); return(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 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"); } }