public ServiceParityResult Process(IEnumerable <ResourceModel> resources, IEnumerable <RuleModel> rules, string targetRegion) { var ruleEngine = new RuleEngine(rules); var details = new Dictionary <string, ServiceParityResourceResult>(); Constants.TargetRegions.TryGetValue(targetRegion, out var targetRegionName); targetRegionName = string.IsNullOrWhiteSpace(targetRegionName) ? Constants.DefaultTargetRegionName : targetRegionName; foreach (var resource in resources.Where(r => r.Details != null)) { try { var originalLocation = resource.Details["location"]; resource.Details["location"] = targetRegion; var outputs = ruleEngine.Analyze(resource.Details, targetRegionName); resource.Details["location"] = originalLocation; details.Add( resource.Id, new ServiceParityResourceResult { Details = outputs.Select(o => this.Convert(o)) }); } catch (Exception ex) { details.Add( resource.Id, new ServiceParityResourceResult { Exception = ex }); } } return(new ServiceParityResult { Details = details }); }