private void InitAssemblyCache() { if (this.assemblies != null) { return; } this.assemblies = DualityApp.GetDualityAssemblies() .Concat(DualityApp.GetDualityAssemblies().SelectMany(a => a.GetReferencedAssemblies().Select(n => Assembly.Load(n)))) .Distinct() .Where(a => !DualityApp.DisposedPlugins.Contains(a)) .ToArray(); this.namespaces = this.assemblies .SelectMany(a => a.GetExportedTypes()) .Select(t => t.Namespace) .Distinct() .Where(n => !string.IsNullOrEmpty(n)) .ToArray(); }
private void InitAssemblyCache() { if (this.assemblies != null) { return; } // Retrieve a list of all loaded, non-disposed Assemblies Assembly[] loadedAssemblies = DualityApp.AssemblyLoader.LoadedAssemblies .Where(a => !DualityApp.PluginManager.DisposedPlugins.Contains(a)) .ToArray(); // Aggregate selectable assemblies based on Duality core Assemblies and their dependencies HashSet <Assembly> selectableAssemblies = new HashSet <Assembly>(); foreach (Assembly coreAssembly in DualityApp.GetDualityAssemblies()) { selectableAssemblies.Add(coreAssembly); AssemblyName[] referencedAssemblies = coreAssembly.GetReferencedAssemblies(); foreach (AssemblyName reference in referencedAssemblies) { string shortName = reference.GetShortAssemblyName(); Assembly dependency = loadedAssemblies.FirstOrDefault(a => a.GetShortAssemblyName() == shortName); if (dependency != null) { selectableAssemblies.Add(dependency); } } } this.assemblies = selectableAssemblies.ToArray(); this.namespaces = this.assemblies .SelectMany(a => { try { return(a.GetExportedTypes()); } catch (Exception) { return(new Type[0]); } }) .Select(t => t.Namespace) .Distinct() .Where(n => !string.IsNullOrEmpty(n)) .ToArray(); }