public CalculationAggregationService(
            ICacheProvider cacheProvider,
            IDatasetAggregationsRepository datasetAggregationsRepository,
            EngineSettings engineSettings,
            ICalculatorResiliencePolicies resiliencePolicies)
        {
            Guard.ArgumentNotNull(cacheProvider, nameof(cacheProvider));
            Guard.ArgumentNotNull(datasetAggregationsRepository, nameof(datasetAggregationsRepository));
            Guard.ArgumentNotNull(engineSettings, nameof(engineSettings));
            Guard.ArgumentNotNull(resiliencePolicies, nameof(resiliencePolicies));
            Guard.ArgumentNotNull(resiliencePolicies.CacheProvider, nameof(resiliencePolicies.CacheProvider));

            _cacheProvider = cacheProvider;
            _datasetAggregationsRepository = datasetAggregationsRepository;
            _engineSettings      = engineSettings;
            _cacheProviderPolicy = resiliencePolicies.CacheProvider;
        }
        public void Initialize()
        {
            _mockCacheProvider = Substitute.For <ICacheProvider>();
            _mockDatasetAggregationsRepository = Substitute.For <IDatasetAggregationsRepository>();
            _mockResiliencePolicies            = new CalculatorResiliencePolicies
            {
                CacheProvider = Policy.NoOpAsync()
            };

            engineSettings = new EngineSettings();

            _calculationAggregationService = new CalculationAggregationService(
                _mockCacheProvider,
                _mockDatasetAggregationsRepository,
                engineSettings,
                _mockResiliencePolicies);
        }
        public CalculationEngineService(
            ILogger logger,
            ICalculationEngine calculationEngine,
            ICacheProvider cacheProvider,
            IMessengerService messengerService,
            IProviderSourceDatasetsRepository providerSourceDatasetsRepository,
            ITelemetry telemetry,
            IProviderResultsRepository providerResultsRepository,
            ICalculationsRepository calculationsRepository,
            EngineSettings engineSettings,
            ICalculatorResiliencePolicies resiliencePolicies,
            IValidator <ICalculatorResiliencePolicies> calculatorResiliencePoliciesValidator,
            IDatasetAggregationsRepository datasetAggregationsRepository,
            IFeatureToggle featureToggle,
            IJobsApiClient jobsApiClient)
        {
            _calculatorResiliencePoliciesValidator = calculatorResiliencePoliciesValidator;

            CalculationEngineServiceValidator.ValidateConstruction(_calculatorResiliencePoliciesValidator,
                                                                   engineSettings, resiliencePolicies, calculationsRepository);

            _logger            = logger;
            _calculationEngine = calculationEngine;
            _cacheProvider     = cacheProvider;
            _messengerService  = messengerService;
            _providerSourceDatasetsRepository = providerSourceDatasetsRepository;
            _telemetry = telemetry;
            _providerResultsRepository = providerResultsRepository;
            _calculationsRepository    = calculationsRepository;
            _engineSettings            = engineSettings;
            _cacheProviderPolicy       = resiliencePolicies.CacheProvider;
            _messengerServicePolicy    = resiliencePolicies.Messenger;
            _providerSourceDatasetsRepositoryPolicy = resiliencePolicies.ProviderSourceDatasetsRepository;
            _providerResultsRepositoryPolicy        = resiliencePolicies.ProviderResultsRepository;
            _calculationsRepositoryPolicy           = resiliencePolicies.CalculationsRepository;
            _datasetAggregationsRepository          = datasetAggregationsRepository;
            _featureToggle       = featureToggle;
            _jobsApiClient       = jobsApiClient;
            _jobsApiClientPolicy = resiliencePolicies.JobsApiClient;
        }