Exemplo n.º 1
0
        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);
        }