public static BackendInstance GetInstance(UIAdapter ui, Random rng = null) { Logger.Debug("Creating backend instance."); SpeciesFileDescription speciesFileDescription = FileSystemService.GetSpeciesMappings(); // Map species classes to list of species IEnumerable <(SpeciesClass, IList <SpeciesMapping>)> speciesClassMappings = speciesFileDescription .SpeciesClassMappings .Select(classMapping => ( SpeciesFactory.GetSpeciesClass(classMapping) , classMapping.SpeciesClassSpeciesMappings)) .ToList(); IEnumerable <Species> species = speciesClassMappings .AsParallel() .SelectMany(tuple => { SpeciesClass parentClass = tuple.Item1; IList <SpeciesMapping> speciesMappings = tuple.Item2; IEnumerable <Species> childrenSpecies = new List <Species>(speciesMappings.Count); childrenSpecies = childrenSpecies .Concat(speciesMappings.Select( s => SpeciesFactory.GetSpecies(s, parentClass))); return(childrenSpecies); }).ToList(); Random rngToUse = rng ?? new Random(); BackendInstance instance = new BackendInstance(ui, species, rngToUse); Logger.Debug("Species loaded and models created."); return(instance); }