public static Grouper CreateFromConfig(GrouperConfiguration config) { Grouper grouper = new Grouper(config.ChangeRatioLowerLimit); if (config.AzureAdRole != null && config.AzureAdRole.Length > 0) { AzureAd az = new AzureAd(config); if (config.AzureAdHasRole(GrouperConfiguration.Role.GroupStore)) { grouper.AddGroupStore(az); } if (config.ExchangeHasRole(GrouperConfiguration.Role.MemberSource)) { grouper.AddMemberSource(az); } if (config.AzureAdHasRole(GrouperConfiguration.Role.GroupOwnerSource)) { grouper.AddGroupOwnerSource(az); } } if (config.ExchangeRole != null && config.ExchangeRole.Length > 0) { Exo exo = new Exo(config); if (config.ExchangeHasRole(GrouperConfiguration.Role.GroupStore)) { grouper.AddGroupStore(exo); } if (config.ExchangeHasRole(GrouperConfiguration.Role.MemberSource)) { grouper.AddMemberSource(exo); } } if (config.OnPremAdHasRole(GrouperConfiguration.Role.GroupStore)) { OnPremAd onPremAd = new OnPremAd(config); if (config.OnPremAdHasRole(GrouperConfiguration.Role.GroupStore)) { grouper.AddGroupStore(onPremAd); } if (config.OnPremAdHasRole(GrouperConfiguration.Role.MemberSource)) { grouper.AddMemberSource(onPremAd); } } if (!string.IsNullOrEmpty(config.MemberDatabaseConnectionString)) { grouper.AddMemberSource(new MemberDb(config)); } if (!string.IsNullOrEmpty(config.LogDatabaseConnectionString)) { grouper.AddLogger(new LogDb(config)); } if (!string.IsNullOrEmpty(config.OpenEDatabaseConnectionString)) { grouper.AddGroupStore(new OpenE(config)); } return(grouper); }