public async Task <IEnumerable <Assembly> > LoadModuleAssembliesAsync(string[] moduleIds) { await InitializeModules(); // Get descriptors for supplied moduleIds var descriptors = _moduleEntries .Where(e => moduleIds.Any(moduleId => moduleId.Equals(e.Descriptor.Id, StringComparison.OrdinalIgnoreCase))) .Select(d => d.Descriptor) .ToList(); // Build all dependencies var loadedAssemblies = new List <Assembly>(); foreach (var descriptor in descriptors) { var assemblies = await _moduleLoader.LoadModuleAsync(descriptor); var assembly = assemblies.FirstOrDefault(a => a.FullName == descriptor.Id); _moduleEntries.Add(new ModuleEntry() { Descriptor = descriptor, Assembly = assembly, Assemblies = assemblies }); loadedAssemblies.AddRange(assemblies); } return(loadedAssemblies); }