public FundingStreamService( IPoliciesApiClient policiesApiClient, IExternalApiResiliencePolicies resiliencePolicies, IMapper mapper) { Guard.ArgumentNotNull(policiesApiClient, nameof(policiesApiClient)); Guard.ArgumentNotNull(resiliencePolicies, nameof(resiliencePolicies)); Guard.ArgumentNotNull(resiliencePolicies.PoliciesApiClientPolicy, nameof(resiliencePolicies.PoliciesApiClientPolicy)); _policiesApiClient = policiesApiClient; _mapper = mapper; _policiesApiClientPolicy = resiliencePolicies.PoliciesApiClientPolicy; }
public PublishedFundingRetrievalService(IBlobClient blobClient, IExternalApiResiliencePolicies resiliencePolicies, IFileSystemCache fileSystemCache, ILogger logger, IExternalApiFileSystemCacheSettings cacheSettings) { Guard.ArgumentNotNull(blobClient, nameof(blobClient)); Guard.ArgumentNotNull(resiliencePolicies, nameof(resiliencePolicies)); Guard.ArgumentNotNull(fileSystemCache, nameof(fileSystemCache)); Guard.ArgumentNotNull(logger, nameof(logger)); Guard.ArgumentNotNull(cacheSettings, nameof(cacheSettings)); Guard.ArgumentNotNull(resiliencePolicies.PublishedFundingBlobRepositoryPolicy, nameof(resiliencePolicies.PublishedFundingBlobRepositoryPolicy)); _blobClient = blobClient; _publishedFundingRepositoryPolicy = resiliencePolicies.PublishedFundingBlobRepositoryPolicy; _fileSystemCache = fileSystemCache; _logger = logger; _cacheSettings = cacheSettings; }
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)); }); }